前言:因为工作需要学习k8s,看了很多大神的文章后,自己终于动手成功部署了k8s简化版集群,仅供学习参考,如有侵权,联系删除。
1、部署k8s的方式:
本实验采用kubeadm的方式搭建集群。
简单介绍:Kubeadm是一个K8s部署工具,提供kubeadm init和kubeadm join,用于快速部署Kubernetes集群。
2、环境准备
服务器硬件配置:不低于2核CPU、2G内存、20G硬盘
网络环境:服务器最好可以访问外网,会有从网上拉取镜像需求
操作系统:centos7.9(最小化安装)
软件版本:Docker:20-ce ;K8s:1.23
服务器IP规划:(本实验采用VMware虚拟机)
192.168.1.38 k8s-master
192.168.1.39 k8s-node1
192.168.1.40 k8s-node2
注:可以先在master节点进行初始化配置,然后克隆出node1和node2节点,节省时间。
3、初始化配置
3.1、安装环境准备:
# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
# 永久关闭selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config
# 永久关闭swap
sed -ri 's/.*swap.*/#&/' /etc/fstab
# 开启流量转发
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
# 新配置生效
sysctl --system
3.2 、配置阿里云yum源
# 配置CentOS-Base源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# 配置docker-ce源
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
# 配置kubernetes源
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
# 清理之前的yum缓存
yum clean all
# 生成新的缓存
yum makecache
# 更新yum源
yum update
3.3、安装相关软件包
# 安装docker-ce
yum -y install docker-ce
# 设置开机自启
systemctl enable docker.service --now
# 配置阿里云镜像仓库
cat > /etc/docker/daemon.json << EOF
{
"registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
# 重启docker服务
systemctl restart docker
#查看确认docker仓库信息
docker info
# 安装kubeadm、kubelet、kubectl,并将kubelet设置开机自启
yum install -y kubelet-1.23.0 kubeadm-1.23.0 kubectl-1.23.0
systemctl enable kubelet
# 安装rsync和ntpdate
yum -y install ntpdate
yum -y install rsync.x86_64
4、以master为模板克隆出node1和node2
# 将master节点虚拟机关机
# 虚拟机→管理→克隆→创建完整克隆
# 将master、node1、node2节点全部开机并查看IP地址
# 在master添加hosts
cat >> /etc/hosts << EOF
192.168.1.38 k8s-master
192.168.1.39 k8s-node1
192.168.1.40 k8s-node2
EOF
# 将master上hosts文件传送给node1和node2
rsync -av /etc/hosts root@192.168.1.39:/etc/
rsync -av /etc/hosts root@192.168.1.40:/etc/
# 时间同步操作三个节点都需进行
注:虚拟机不管关机还是挂起,每次重新操作都需要更新时间进行同步。
ntpdate time.windows.com
5、部署k8s-master(在master节点执行)
--apiserver-advertise-address 集群通告地址
--image-repository 由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址
--kubernetes-version K8s版本,与上面安装的一致
--service-cidr 集群内部虚拟网络,Pod统一访问入口
--pod-network-cidr Pod网络,与下面部署的CNI网络组件yaml中保持一致
kubeadm init \
--apiserver-advertise-address=192.168.1.38 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.23.0 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16 \
--ignore-preflight-errors=all
# 按照安装成功的提示输入命令,拷贝k8s认证文件
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
# 查看node节点
kubectl get nodes
6、配置k8s的node节点(node节点操作)
# 向集群添加新节点,node1和node2都需执行kubeadm join命令
kubeadm join 192.168.1.38:6443 --token 9520ih.k0f6fspxfzl0u481 \
> --discovery-token-ca-cert-hash sha256:f4872c506f130f9f1e99ae1addac079622f6ff825019e5e2577fd94ec9a2c7c7
注:默认token有效期为24小时,过期之后,该token就无法使用。
# 重新创建token命令
kubeadm token create --print-join-command
7、部署容器网络 (master节点执行)
Calico是一个纯三层的数据中心网络方案,是目前Kubernetes主流的网络方案。
# 下载calico.yaml文件
curl https://docs.projectcalico.org/v3.18/manifests/calico.yaml -O
注:下载calico.yaml文件遇到各种问题,这是查看各种大神文章中评论中给的建议,目前可以使用。
# 修改calico.yaml文件里面定义Pod网络(CALICO_IPV4POOL_CIDR),与前面kubeadm init的 --pod-network-cidr指定的一样10.244.0.0/16,取消注释。
# 使用kubectl 运行yaml文件
kubectl apply -f calico.yaml
# 查看pod是否全部running,需要等一会
kubectl get pods -n kube-system
# Calico Pod都Running后,node节点也会准备就绪
kubectl get nodes
8、部署Dashboard
# Dashboard是官方提供的一个web管理界面,可用于基本管理K8s资源
# 下载yaml文件
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.4.0/aio/deploy/recommended.yaml
# 默认Dashboard只能集群内部访问,需要修改Service为NodePort类型,暴露到外部
vim recommended.yaml
# 执行修改后的yaml文件
kubectl apply -f recommended.yaml
# 查看pod是否运行起来
kubectl get pods -n kubernetes-dashboard
# 访问地址:https://IP:30001
# 创建service account并绑定默认cluster-admin管理员集群角色
# 创建用户
kubectl create serviceaccount dashboard-admin -n kube-system
# 用户授权
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
# 获取用户Token
kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')
# 使用输出的token登录Dashboard