K8S-部署 worker 节点
说在前面:下面初始化环境工作都在 work 节点执行
环境初始化
1、修改 hostname
[root@node6 ~]# vim /etc/hostname
将规划好的 node 名称写入 hostname 文件保存即可
2、重启
[root@node6 ~]# reboot
3、关闭防火墙
[root@node6 ~]# systemctl stop firewalld
[root@node6 ~]# systemctl disable firewalld
输出:
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
4、关闭 selinux
[root@node6 ~]# sed -i 's/enforcing/disabled/' /etc/selinux/config
[root@node6 ~]# setenforce 0
5、关闭 swap
注意:由于服务器本来配置就低,这里就不关闭 swap,在后面部署过程中忽略 swap 报错即可
[root@node6 ~]# swapoff -a #临时
[root@node6 ~]# vim /etc/fstab #永久
/dev/mapper/centos-root / xfs defaults 0 0
UUID=438d00fa-518c-4ad6-8738-a44acce033a7 /boot xfs defaults 0 0
## 需要注释这一行,如果没有请忽略
#/dev/mapper/centos-swap swap swap defaults 0 0
6、时间同步
[root@node6 ~]# yum install -y ntpdate
[root@node6 ~]# ntpdate 0.rhel.pool.ntp.org
输出:
10 Aug 13:18:34 ntpdate[8380]: adjust time server 84.16.67.12 offset -0.000334 sec
7、host 绑定
注意:根据实际集群规划进行填写
[root@node6 ~]# vim /etc/hosts
192.168.1.24 master24
192.168.1.21 node21
192.168.1.22 node22
192.168.1.23 node23
安装 docker
1、配置 docker 的 yum 仓库(这里使用阿里云仓库)
[root@node6 ~]# yum -y install yum-utils device-mapper-persistent-data lvm2
[root@node6 ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
2、安装 docker
[root@node6 ~]# yum -y install docker-ce-19.03.7-3.el7 docker-ce-cli-19.03.7-3.el7 containerd.io
3、修改 docker cgroup driver 为 systemd
根据文档 CRI installation 中的内容,对于使用 systemd 作为 init system 的 Linux 的发行版,使用 systemd 作为 docker 的 cgroup driver 可以确保服务器节点在资源紧张的情况更加稳定,因此这里修改各个节点上 docker 的 cgroup driver 为 systemd。
[root@node6 ~]# mkdir /etc/docker #没启动docker之前没有该目录
[root@node6 ~]# vim /etc/docker/daemon.json #如果不存在则创建
# 把一下内容填写到 daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"]
}
4、启动 docker
[root@node6 ~]# systemctl restart docker #启动docker
[root@node6 ~]# systemctl enable docker #开机自启动
[root@node6 ~]# docker info |grep Cgroup #查看
输出:
Cgroup Driver: systemd
修改 docker 的默认存储
注意:如果系统空间较小,建议将 docker 的默认存储存到数据盘目录。
1、修改 docker 的默认存储
[root@node6 ~]# systemctl stop docker
2、转移数据到 data 路径
[root@node6 ~]# yum install rsync -y
[root@node6 ~]# rsync -avzHP /var/lib/docker /data/
3、修改配置文件
[root@node6 ~]# vim /etc/docker/daemon.json
# 将 "graph":"/data/docker" 填写到 daemon.json 文件,最终内容如下
{
"exec-opts": ["native.cgroupdriver=systemd"],
"graph":"/data/docker"
}
4、启动 docker
[root@node6 ~]# systemctl start docker
安装 kubeadm
1、配置 kubenetes 的 yum 仓库(这里使用阿里云仓库)
[root@node6 ~]# cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
[root@node6 ~]# yum makecache
2、安装 kubelet、kubectl、kubeadm
[root@node6 ~]# yum -y install kubelet-1.18.2 kubeadm-1.18.2 kubectl-1.18.2
[root@node6 ~]# rpm -aq kubelet kubectl kubeadm
输出:
kubeadm-1.18.2-0.x86_64
kubectl-1.18.2-0.x86_64
kubelet-1.18.2-0.x86_64
3、将 kubelet 加入开机启动,这里刚安装完成不能直接启动。(因为目前还没有集群还没有建立)
[root@node6 ~]# systemctl enable kubelet
输出:
Created symlink from /etc/systemd/system/multi-user.target.wants/kubelet.service to /usr/lib/systemd/system/kubelet.service.
加入 worker 节点
向集群中添加新节点,执行在kubeadm init 输出的kubeadm join命令,再在后面同样添加忽略swap报错参数。
1、配置忽略 swap 报错
[root@node6 ~]# vim /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS="--fail-swap-on=false"
2、获取 token,需要在 master 上执行
注意:在 master 上执行
[root@master ~]# kubeadm token create
输出:
k63qvd.d4az6zu90xk8x2iy
3、获取 CA 公钥的哈希值,需要在 master 上执行
注意:在 master 上执行
[root@master ~]# openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt \
| openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
输出:
832ca72d2d0a4ae23e0a122bd4406a76567471e298f27a67f877ee5189cd0c2a
4、将 node 节点加入集群 需要在 work 上执行
注意:将对应的 ip、token、哈希值替换以下指令执行,在 node 上执行
[root@node6 ~]# kubeadm join 192.168.1.41:6443 \
--token k63qvd.d4az6zu90xk8x2iy \
--discovery-token-ca-cert-hash sha256:832ca72d2d0a4ae23e0a122bd4406a76567471e298f27a67f877ee5189cd0c2a \
--ignore-preflight-errors=Swap
输出:
[preflight] Running pre-flight checks
[preflight] Reading configuration from the cluster...
[preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -oyaml'
[kubelet-start] Downloading configuration for the kubelet from the "kubelet-config-1.15" ConfigMap in the kube-system namespace
[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
[kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
[kubelet-start] Activating the kubelet service
[kubelet-start] Waiting for the kubelet to perform the TLS Bootstrap...
This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.
Run 'kubectl get nodes' on the control-plane to see this node join the cluster.
支持从 Inner Harbor 拉取镜像
1、修改 docker 配置文件
[root@ecs-c024 ~]# vim /etc/docker/daemon.json
增加如下配置,地址为Harbor的地址
"insecure-registries": ["192.168.1.181:8080"]
{
"exec-opts": ["native.cgroupdriver=systemd"],
"graph":"/data/docker",
"insecure-registries": ["192.168.1.181:8080"]
}
2、重启 docker
systemctl restart docker
3、测试登录 Harbor
docker login 192.168.1.181:8080 -u admin -p Harbor12345
输出:
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
支持 NFS 存储
1、安装nfs和rpc
yum -y install nfs-utils rpcbind
2、启动服务和设置开启启动
[root@localhost ~]# systemctl start rpcbind #先启动rpc服务
[root@localhost ~]# systemctl enable rpcbind #设置开机启动
[root@localhost ~]# systemctl start nfs-server
[root@localhost ~]# systemctl enable nfs-server
3、测试客户端
注意:将 ${nfs-server} 替换为 nfs 服务器的 ip, 将 ${public} 替换为共享的路径
#安装nfs服务
[root@localhost ~]# mkdir /tmp/testnfs \
&& mount -t nfs ${nfs-server}:/${public} /tmp/testnfs \
&& echo "hello nfs" >> /tmp/testnfs/test.txt \
&& cat /tmp/testnfs/test.txt
输出:
hello nfs
4、查看服务端挂载情况
#安装nfs服务
[root@localhost ~]# showmount -e nfs-server-ip #先启动rpc服务
输出:
Export list for 192.168.1.181:
/data/k8sdata *