比起君子讷于言而敏于行,我更喜欢君子善于言且敏于行。


前言

做了一些node节点的相关配置,很多地方为了省事儿版本一致都是直接从master上打包扔过来的镜像,很好用的方法。


都完成之后安全起见 sudo reboot一下设备,保证它干干净净的,防止有网络的残余配置影响pod启用

一、docker相关内容

1. 查看docker的存储路径和版本

sudo docker info --format '{{.DockerRootDir}}'
docker --version
cat /etc/docker/daemon.json

我之前版本太低,需要升级,也记录一下升级过程

2. 升级docker为19.03.15

mkdir /tmp/k8s && cd /tmp/k8s

wget  https://mirrors.aliyun.com/docker-ce/linux/static/stable/x86_64/docker-19.03.15.tgz 

tar xzvf docker-19.03.15.tgz


sudo systemctl stop docker

sudo systemctl stop containerd

sudo systemctl disable docker
sudo systemctl disable containerd

sudo cp docker/* /usr/bin/

sudo mv /etc/docker/daemon.json /etc/docker/daemon.json.date.$(date +%F-%T).bak

sudo tee /etc/docker/daemon.json <<EOF
{
   "exec-opts": ["native.cgroupdriver=systemd"],
   "data-root": "/data/docker",
   "insecure-registries": ["registry.com"],
   "log-driver": "json-file",
   "log-opts": {
         "max-size": "100m",
         "max-file": "5"
   } 
}
EOF

sudo systemctl reset-failed docker
sudo systemctl daemon-reexec

sudo systemctl start containerd
sudo systemctl status containerd

sudo systemctl start docker
sudo systemctl status docker

sudo systemctl enable docker
sudo systemctl enable containerd

docker --version

二、k8s清理+安装新版本

之前这些机器上做过低版本的k8s,由于不能重装,所以只能清理

1. 一键把节点恢复成裸机

sudo kubeadm reset -f

2. 删除 CNI 插件留下的所有网络配置

sudo rm -rf /var/lib/cni/

3. 删除 kubelet 本地“Pod 资源使用量”快照

sudo rm -rf /var/lib/kubelet/pod-resources/

4. 停服+查看当前版本

sudo systemctl stop kubelet
kubelet --version

5. 下载安装

# 创建临时目录
mkdir -p /tmp/k8s && cd /tmp/k8s

# 下载 kubeadm/kubelet/kubectl 1.21.10
curl -LO https://dl.k8s.io/v1.21.10/kubernetes-node-linux-amd64.tar.gz

# 解压并安装
sudo tar -xzvf kubernetes-node-linux-amd64.tar.gz
sudo cp kubernetes/node/bin/kubeadm /usr/local/bin/
sudo cp kubernetes/node/bin/kubelet /usr/local/bin/
sudo cp kubernetes/node/bin/kubectl /usr/local/bin/

# 设置可执行权限
sudo chmod +x /usr/local/bin/kubeadm /usr/local/bin/kubelet /usr/local/bin/kubectl
sudo mkdir -p /etc/systemd/system/kubelet.service.d

6. kubelet systemd 配置或者systemd配置

(二选一即可,感觉b更方便好用)

(a)
cat <<EOF | sudo tee /etc/systemd/system/kubelet.service
[Unit]
Description=kubelet: The Kubernetes Node Agent
Documentation=https://kubernetes.io/docs/home/
Wants=network-online.target
After=network-online.target docker.service
Requires=docker.service

[Service]
ExecStart=/usr/local/bin/kubelet
Restart=always
RestartSec=10
StartLimitInterval=0
Environment="KUBELET_KUBEADM_ARGS=--cgroup-driver=systemd"

[Install]
WantedBy=multi-user.target
EOF

(b)把 systemd 配置改成用新的 kubelet:

# 停掉旧 kubelet
sudo systemctl stop kubelet

# 先备份旧的
sudo mv /usr/bin/kubelet /usr/bin/kubelet.bak.1.14

# 用新版覆盖过去
sudo cp /usr/local/bin/kubelet /usr/bin/kubelet

# 重新加载 systemd
sudo systemctl daemon-reexec
sudo systemctl daemon-reload

# 启动 kubelet(启动后可能会不停地报错说拉取镜像失败,这个不用管,后面会传给它网络插件所需的镜像,或者先不启动,镜像都传完之后再启动)
sudo systemctl start kubelet
sudo systemctl enable kubelet

7. 确认版本

kubelet --version
sudo journalctl -u kubelet -n 20 | grep "Kubernetes"

三、添加node节点

1. master获得join的命令

kubeadm token create --print-join-command

2. node执行kubeadm join 

#执行完之后回master上执行 kubectl get nodes 就可以看到新机器了

sudo kubeadm join <master-ip>:6443 --token d8fjkz.hf2vb2afc --discovery-token-ca-cert-hash sha256:38c9ece50fea0c92f4282174bd48

四、安装网络插件flannel

#master上直接打包扔过来
sudo docker images | grep flannel
sudo docker images | grep pause
sudo docker save -o /tmp/flannel-v0.25.5.tar      flannel/flannel:v0.25.5
sudo docker save -o /tmp/flannel-cni-v1.5.1.tar  flannel/flannel-cni-plugin:v1.5.1-flannel1
sudo docker save -o /tmp/pause_3.4.1.tar k8s.gcr.io/pause:3.4.1

#node节点
cd /tmp
scp -r ubuntu@<master-ip>:/tmp/flannel-cni-v1.5.1.tar .
scp -r ubuntu@<master-ip>:/tmp/flannel-v0.25.5.tar .
scp -r ubuntu@<master-ip>:/tmp/pause_3.4.1.tar .

sudo docker load -i flannel-v0.25.5.tar
sudo docker load -i flannel-cni-v1.5.1.tar
sudo docker load -i pause_3.4.1.tar

sudo docker images | grep flannel
sudo docker images | grep pause

五、拉取kube-proxy和pause镜像

  • pause:每个 Pod 的基础容器,创建共享网络空间
  • kube-proxy:节点网络代理,实现 Service 负载均衡
  • 两者都是 K8s 必须镜像,离线部署必须提前下载打包
sudo docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.21.10
sudo docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.21.10 k8s.gcr.io/kube-proxy:v1.21.10


sudo docker pull registry.aliyuncs.com/google_containers/pause:3.4.1
sudo docker tag  registry.aliyuncs.com/google_containers/pause:3.4.1 k8s.gcr.io/pause:3.4.1

sudo systemctl restart kubelet

注意: Kubernetes 集群(用了 Calico 网络)在 Ubuntu 16.04 上会因为缺少 DNS 配置文件而无法创建 Pod,所以必须安装启动 systemd-resolved 服务来生成这个文件,否则 Pod 永远卡在初始化状态(Init)。安装好之后sudo systemctl restart kubelet

sudo apt update
sudo apt install systemd
sudo systemctl enable systemd-resolved
sudo systemctl start systemd-resolved
systemctl status systemd-resolved
#校验关键文件是否生成(核心)
ls -lh /run/systemd/resolve/resolv.conf

sudo systemctl restart kubelet

 


总结

这篇结束后,集群就可以使用啦。最好还是有一个rancher的图形化页面,方便管理。但是我找不到之前部署rancher的文档了……回头有机会,再补一份叭

 

更多推荐