关于devops:k8s-docker-基于-kubeadm-多节点集群部署

10次阅读

共计 4454 个字符,预计需要花费 12 分钟才能阅读完成。

k8s + docker 基于 kubeadm 多节点集群部署

博客文章地址:https://blog.taoluyuan.com/posts/install-k8s/

各个节点环境筹备

[环境筹备] 这章的操作都要在两台机器上别离执行, 我筹备了两台机器, 如下:

  1. 一台 master, 一台 node
  2. 主机 1(master) ip:192.168.31.122, 主机 2 192.168.31.166

    1. docker 装置

    如曾经装置好 docker 可跳过
    docker 官网装置 https://docs.docker.com/engine/install/ubuntu/ 有点慢
    清华大学 镜像装置办法 https://mirrors.tuna.tsinghua.edu.cn/help/docker-ce/

装置依赖

sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu \"$(. /etc/os-release && echo "$VERSION_CODENAME")"stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

装置 docker-ce

sudo apt-get update
sudo apt-get install docker-ce

docker 组授予用户根级权限, 让以后登陆也能够应用 docker

sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker

镜像加速器

通过批改 daemon 配置文件 /etc/docker/daemon.json 批改 registry, 我应用的是上海交大

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://docker.mirrors.sjtug.sjtu.edu.cn/"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

2. 装置 kubeadm, kubelet 和 kubectl

[阿里云官网举荐源](https://developer.aliyun.com/mirror/kubernetes?spm=a2c6h.1365…
)

apt-get update && apt-get install -y apt-transport-https
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add - 
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
sudo apt-get update

装置 1.22.0 版本

apt-get install -y kubelet=1.22.0-00 kubeadm=1.22.0-00 kubectl=1.22.0-00

查看版本

kubelet --version
kubeadm version
kubectl version

kubelet 开机自启

systemctl enable kubelet

应用 systemd 作为 docker cgroup 驱动程序

从 v1.22 开始,在应用 kubeadm 创立集群时,kubeadm 默认应用 systemd, 而 docker 默认应用 cgroupfs, 所以须要批改 docker 的 cgroup 驱动程序为 systemd,k8s cgroup-drivers 阐明
关上 /etc/docker/daemon.json 文件, 追加以下配置

{"exec-opts": ["native.cgroupdriver=systemd"]
}

重启 docker

systemctl daemon-reload
systemctl restart docker
systemctl enable docker

查看 cgroup 驱动, 必须是 systemd, 才行

docker info|grep Cgroup

4. swapoff 设置

设置 swapoff

sudo swapoff -a

永恒设置 swapoff, 正文掉 swap 那一行

vim /etc/fstab

查看 swapon, 必须是空的, 不然接下来的 kubeadm init 会报错

swapon -s

kubeadm 主节点 装置 k8s

kubeadm init 装置 k8s
  1. 能够先拉取镜像, 这样 kubeadm init 的时候就不会拉取镜

    sudo kubeadm config images pull --kubernetes-version=v1.22.0 --image-repository registry.aliyuncs.com/google_containers
  2. 执行 init
  3. –kubernetes-version 指定 k8s 版本为 1.22.0,
  4. –image-repository 指定镜像仓库为阿里云:registry.aliyuncs.com/google_containers, 因为 k8s 默认的镜像仓库是 gcr.io, 国内拜访不了
  5. –pod-network-cidr 指定 pod 的网段, 须要与 cni 插件的网段统一, 否则会呈现 pod 无奈通信的问题 ,flannel 的网段是 10.244.0.0/16

    sudo kubeadm init --kubernetes-version=v1.22.0 --image-repository registry.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16
  6. kubectl get nodes 查看节点状态

    kubectl get nodes

    应该会 呈现 localhost:8080 was refused – did you specify the right host or port? 谬误
    将 /etc/kubernetes/admin.conf 拷贝到 $HOME/.kube/config

    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown -R $USER:$USER $HOME/.kube

    再查看 nodes 状态

装置网络插件

此时获取节点状态会发现有一个节点是 NotReady 状态,
而且, 查看 pod 状态会发现,coredns 也是 Pending 状态

kubectl get pods --all-namespaces

这是因为还没有装置网络插件, 这里我抉择装置 flannel

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

网络不好能够应用 ghproxy

kubectl apply -f https://ghproxy.com/https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

期待会再次查看 pod 状态,coredns 状态是 Running, 节点状态是 Ready

子节点退出集群

  1. master 节点生成 token, 并且指定 master 节点的 ip, 生成 join 命令

    kubeadm token create --print-join-command --ttl 0 --kubeconfig /etc/kubernetes/admin.conf

    会呈现 相似以下 join 命令

    kubeadm join 192.168.31.122:6443 --token kzmdey.dk0tcgyg4ivr8y87 --discovery-token-ca-cert-hash sha256:bc2e3252080ba81e342933955682ae119decc948fef2180e5135b0dd891e5891
  2. 在子节点执行下面的 join 命令, 退出集群
  3. 在 master 节点查看节点状态

     k get nodes -o wide

    能够看到两个节点都是 Ready 状态

    NAME    STATUS   ROLES                  AGE   VERSION   INTERNAL-IP      EXTERNAL-IP   OS-IMAGE       KERNEL-VERSION      CONTAINER-RUNTIME
    song    Ready    control-plane,master   45h   v1.22.0   192.168.31.122   <none>        Ubuntu 22.10   5.19.0-21-generic   docker://24.0.2
    song2   Ready    <none>                 77m   v1.22.0   192.168.31.166   <none>        Ubuntu 22.10   5.19.0-21-generic   docker://24.0.2

装置相干问题排查

  1. container runtime is not running: output: time=”2023-06-08T14:09:02Z” level=fatal msg=”validate service connection: CRI v1 runtime API is not implemented for endpoint \”unix:///var/run/containerd/containerd.sock\”: rpc error: code = Unimplemented desc = unknown service runtime.v1.RuntimeService”
    解决办法

    sudo rm /etc/containerd/config.toml
    sudo systemctl restart containerd
  2. ubuntu 零碎

    swapoff -a
  3. 查看 pod 呈现谬误, 要是呈现相似 pod cidr not assigned, 如果是 flannel 网络插件, 那么就是没有设置 pod-network-cidr
  4. 排查 kubelet 日志

    sudo systemctl status kubelet.service
    sudo journalctl -xu kubelet.service

正文完
 0