1. 前言
我们在上一篇文章完成了Matster结点的部署,这次我们接着来部署Node服务,注意,我Node服务是部署在另外两台服务器上
2. 部署Node服务
部署Node服务与Master服务的前置环境也是类似的
2.1. 前置环境安装
关闭防火墙
systemctl stop firewalld systemctl disable firewalld
关闭 selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久 setenforce 0 # 临时
关闭swap,关闭完swap后要重启一遍机器!
swapoff -a # 临时 sed -ri 's/.*swap.*/#&/' /etc/fstab # 永久
根据规划设置主机名
hostnamectl set-hostname 这里填你的主机名(随便起,比如k8s-node1)
将桥接的IPv4流量传递到iptables的链
cat > /etc/sysctl.d/k8s.conf << EOF net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF
让上述配置生效
sysctl --system
同步机器时间
yum install ntpdate -y ntpdate time.windows.com
安装docker(使用官方的自动脚本)
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
启动docker
sudo systemctl start docker
添加阿里云镜像源
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
安装kubeadm、kubelet、kubectl
yum install -y kubelet-1.23.6 kubeadm-1.23.6 kubectl-1.23.6 systemctl enable kubelet
配置关闭 Docker 的 cgroups(不关闭后面启动会报错),修改 /etc/docker/daemon.json(如果没有这个文件就手动创建),加入以下内容
{"exec-opts": ["native.cgroupdriver=systemd"]}
重启docker
systemctl daemon-reload systemctl restart docker
2.2. 将Node服务加入集群
在Master服务器获取token,保存这个token,我们后面要用到
# 如果 token 已经过期,就重新申请 kubeadm token create # token 没有过期可以通过如下命令获取 kubeadm token list
获取 --discovery-token-ca-cert-hash 值,保存这个值,我们后面也要用到
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | \ openssl dgst -sha256 -hex | sed 's/^.* //'
将Node服务加入集群
kubeadm join master服务ip:6443 --token 换成上面获取到的token --discovery-token-ca-cert-hash sha256:换成上面获取到的hash值(sha256:别删)
在Matser校验Node是否加入了集群
kubectl get nodes
3. 部署JNI网络插件
细节的小伙伴可能会发现,我们几个结点的状态都是NotReady
我们接着输入kubectl get pods命令查看集群中的pod,发现提示没有发现任何资源在命名空间中
我们接着输入kubectl get pods -n kube-system 去查看系统pod运行情况,可以看到前两个pod状态不为Running,这里就是因为pod没有网络引起的,所以我们需要安装CNI网络插件来解决这个问题
下载calico配置文件
mkdir -p /k8s cd /k8s/ curl https://calico-v3-25.netlify.app/archive/v3.25/manifests/calico.yaml -O
修改 calico.yaml 文件中的 CALICO_IPV4POOL_CIDR 配置,修改为与初始化的 cidr 相同。这里默认注释起来了,我们把注释取消,把value改为我们初始化服务的配置信息
修改值对于我们上节初始化时的参数
改完后如下
接下来我们需要下载一些必需的镜像,我们先删除镜像下载链接 docker.io/ 前缀,避免下载过慢导致失败
sed -i 's#docker.io/##g' calico.yaml
下载需要的基础镜像
grep image calico.yaml
docker pull calico/cni:v3.25.0 docker pull calico/node:v3.25.0 docker pull calico/kube-controllers:v3.25.0
下载完镜像后,构建网络插件
kubectl apply -f calico.yaml
输入kubectl get pod -n kube-system再次查看系统pod,可以发现多了几个calico-node,状态为init,也就是pod在初始化中,我们稍作等待
下载完镜像后,构建网络插件
kubectl apply -f calico.yaml
输入kubectl get pod -n kube-system再次查看系统pod,可以发现多了几个calico-node,状态为init,也就是pod在初始化中,我们稍作等待
4. 测试集群
我们这里简单部署一个nginx服务来测试集群
创建部署
kubectl create deployment nginx --image=nginx
暴露服务端口
kubectl expose deployment nginx --port=80 --type=NodePort
查看 pod 以及服务信息
kubectl get pod,svc
可以看到80端口映射到了31472端口,我们通过ip:端口访问nginx服务, 可以看到服务可以正常访问,测试结果正常。
5. 总结
整体的部署流程还是有点长的,特别是下载镜像时可能因网络问题会等待很久,需要一点耐心。跟着教程来应该没有大问题(有问题可以评论区留言,一起解决)。