1 修改K8S的yum源
修改 kubernetes.repo 文件中URL为阿里源地址,也可以根据自己的需要,修改为腾讯、华为或者清华的yum源镜像地址。
vi /etc/yum.repos.d/kubernetes.repo
修改为以下内容
[Kubernetes]
name=Kubernetes
baseurl=mirrors.aliyun.com/kubernetes/…
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=mirrors.aliyun.com/kubernetes/…
mirrors.aliyun.com/kubernetes/…
清除并重建缓存
yum clean all
yum -y makecache
2 安装K8S工具
主要是安装K8S中的三个组件:kubelet kubeadm kubectl,并指定版本,避免下载最新版本导致不兼容。
(注:技术学习,不要求新,最新的版本往往并不是最优的选择,新版本中遇到的问题可能还没有现成的解决方法。不利于学习。)
yum install -y kubelet-1.23.0 kubeadm-1.23.0 kubectl-1.23.0
#设置kubelet为开机自启动
systemctl enable kubelet
3 部署K8S
前边的所有操作,全部都需要在 master 及节点上进行操作。
下边的操作,则需要区分 master 及节点机器。
3.1 部署master
进入到 master 服务器,执行以下指令:
kubeadm init \
--apiserver-advertise-address=192.168.137.3 \
--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
相关参数说明:
--apiserver-advertise-address集群master的IP地址,根据实际填写--image-repository镜像仓库地址--kubernetes-versionK8S版本--service-cidrservice服务的虚拟IP,由集群外部访问集群内部时,可通过该地址进行访问--pod-network-cidrPOD网络地址,集群内部虚拟IP,应与service服务的虚拟IP不同--ignore-preflight-errors设置忽略预检错误
执行完该命令后,末尾会生成节点加入到k8s集群的指令。
该token在24小时内有效,过时需要重新生成,生成的指令为:
kubeadm token create --print-join-command
创建必要文件
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
3.2 添加节点
进入到节点服务器,执行master服务器末尾生成的指令
如图,执行完成后,该节点被成功加入到了k8s集群中。
3.3 集群验证
在 master 中执行指令 kubectl get nodes ,两个服务器都加入到了K8S集群中,一台作为控制器和master,另外一台作为节点。
4 部署容器网络
4.1 配置Calico
Calico是一个纯三层的数据中心网络解决方案,是目前K8S主流的网络方案。K8S中要求各容器互联互通且相互隔离。
继续进入到master中进行操作。
下载yaml文件
wget https://docs.projectcalico.org/v3.15/manifests/calico.yaml --no-check-certificate
下载完成后,需要修改里面定义的POD网络(CALICO_IPV4POOL_CIDR),与前面 3.1 步骤中 kubeadm init 的 -pod-network-cidr 指定的内容保持一致。
在yaml文件中搜索并找到该 name 数据,打开注释并对value进行修改。
将该yaml文件,放到master服务器的 /usr/local 目录或其它任意目录下,在该目录下执行如下指令:
kubectl apply -f calico.yaml
服务器将从网络中下载calico相关镜像到节点,该过程持续时间较长。
4.2 查看K8S集群
在master中重新执行指令 kubectl get nodes,查看节点状态,此时各节点都处于 Ready 状态。
查看通信状态
kubectl get pods -n kube-system