基于 docker 部署 k8s 集群

发布于:2025-05-28 ⋅ 阅读:(18) ⋅ 点赞:(0)

💢欢迎来到张翊尘的开源技术站
💥开源如江河,汇聚众志成。代码似星辰,照亮行征程。开源精神长,传承永不忘。携手共前行,未来更辉煌💥

基于 docker 部署 k8s 集群

操作系统说明

$ cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)

硬件配置说明

主机名 CPU 内存 硬盘 角色
master01 2c 4gb 100gb master
worker01 2c 4gb 100gb worker
worker02 2c 4gb 100gb worker

以上配置信息仅限于测试环境,生产环境请按照实际配置信息进行更改

主机配置

IP 设置

主机名 IP 地址 掩码地址
master01 192,168.2.110 255.255.255.0
worker01 192,168.2.110 255.255.255.0
worker02 192,168.2.110 255.255.255.0

主机名设置

  • master01
$ hostnamectl set-hostname master01
  • worker01
$ hostnamectl set-hostname worker01
  • worker02
$ hostnamectl set-hostname worker02

主机名与 IP 地址解析

所有集群主机均需要进行配置

$ cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.2.110 master01
192.168.2.111 worker01
192.168.2.112 worker02

防火墙配置

  • 停止防火墙
$ systemctl stop firewalld
  • 禁止开机自启
$ systemctl disable firewalld
  • 查看防火墙状态
$ systemctl status firewalld

SELinux 设置

所有主机均需要操作,配置完毕后需要重启操作系统

$ sed -ri 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

时间同步配置

  • 安装 ntpdate
$ yum -y install ntpdate
  • 添加 crontab 定时任务
$ crontab -l
0 */1 * * * /usr/sbin/ntpdate time1.aliyun.com

升级操作系统内核

所有主机均需要操作,配置完毕后需要重启操作系统

  • 离线安装包

下载地址

  • 安装
$ yum -y localinstall *.rpm
  • 查看已安装的 rpm
$ rpm -qa | grep kernel
kernel-ml-tools-5.19.9-1.el7.elrepo.x86_64
kernel-ml-devel-5.19.9-1.el7.elrepo.x86_64
kernel-ml-headers-5.19.9-1.el7.elrepo.x86_64
kernel-3.10.0-1160.el7.x86_64
kernel-ml-tools-libs-5.19.9-1.el7.elrepo.x86_64
kernel-ml-doc-5.19.9-1.el7.elrepo.noarch
kernel-ml-tools-libs-devel-5.19.9-1.el7.elrepo.x86_64
kernel-ml-5.19.9-1.el7.elrepo.x86_64
  • 设置 grub2 默认引导为0
$ grub2-set-default 0
  • 重新生成 grub2 引导文件
$ grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-5.19.9-1.el7.elrepo.x86_64
Found initrd image: /boot/initramfs-5.19.9-1.el7.elrepo.x86_64.img
Found linux image: /boot/vmlinuz-3.10.0-1160.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-1160.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-66603fcac0fd4dfb91292cfc4f8d3f36
Found initrd image: /boot/initramfs-0-rescue-66603fcac0fd4dfb91292cfc4f8d3f36.img
done
  • 重启,使用升级的内核生效
reboot
  • 验证
$ uname -r
5.19.9-1.el7.elrepo.x86_64

内核转发以及网桥过滤

所有主机均需要操作

  • 添加网桥过滤及内核转发配置文件
$ cat /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness = 0
  • 加载 br_netfilter 模块
$ modprobe br_netfilter
  • 查看是否加载
$ lsmod | grep br_netfilter
  • 加载网桥过滤及内核转发配置文件
$ sysctl -p /etc/sysctl.d/k8s.conf

安装 ipsetipvsadm

所有主机均需要操作

  • 安装 ipsetipvsadm
$ yum -y install ipset ipvsadm
  • 配置 ipvsadm 模块加载方式
$ cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
EOF
  • 授权
$ chmod 755 /etc/sysconfig/modules/ipvs.modules
  • 运行
bash /etc/sysconfig/modules/ipvs.modules
  • 检查是否加载
$ lsmod | grep -e ip_vs -e nf_conntrack

关闭 swap 交换分区

所有主机均需要操作,配置完毕后需要重启操作系统

  • 临时关闭
$ swapoff -a
  • 永久关闭

使用 # 注释掉 swap 分区配置

$ cat /etc/fstab
# /dev/mapper/centos-swap swap                    swap    defaults        0 0

容器运行时配置

所有集群主机均需操作

获取 yum

  • 下载 wget
$ yum -y install wget
  • 获取 repo 源文件
$ wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
  • 查看可安装版本
$ yum list docker-ce.x86_64 --showduplicates | sort -r

安装 docker

$ yum -y install docker-ce

修改 cgroup 方式

# cat /etc/docker/daemon.json
{
    "exec-opts": ["native.cgroupdriver=systemd"]
}

启动 docker 服务

  • 设置开机自启动
$ systemctl enable docker
  • 启动服务
$ systemctl start docker
  • 查看 docker 信息
$ docker info

集群部署

软件说明

kubeadm kubelet kubectl
1.21.0 1.21.0 1.21.0
集群所有主机 集群所有主机 集群所有主机

yum 源准备

所有集群主机均需操作

[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

软件安装

所有集群主机均需操作

  • 查看指定版本
$ yum list kubeadm.x86_64 --showduplicates | sort -r
$ yum list kubelet.x86_64 --showduplicates | sort -r
$ yum list kubectl.x86_64 --showduplicates | sort -r
  • 安装指定版本
$ yum -y install --setopt=obsoletes=0 kubeadm-1.21.0-0  kubelet-1.21.0-0 kubectl-1.21.0-0

配置 kubelet

所有集群主机均需操作

  • 修改启动项

为了实现 docker 使用的 cgroupdriverkubelet 使用的 cgroup 的一致性,修改如下文件内容

# vi /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
  • 设置开机自启
$ systemctl enable kubelet

镜像准备

所有集群主机均需操作

  • 查看镜像列表
$ kubeadm config images list --kubernetes-version=v1.21.0
k8s.gcr.io/kube-apiserver:v1.21.0
k8s.gcr.io/kube-controller-manager:v1.21.0
k8s.gcr.io/kube-scheduler:v1.21.0
k8s.gcr.io/kube-proxy:v1.21.0
k8s.gcr.io/pause:3.4.1
k8s.gcr.io/etcd:3.4.13-0
k8s.gcr.io/coredns/coredns:v1.8.0
  • 下载镜像文件

下载地址

初始化

主节点执行

$ kubeadm init --kubernetes-version=v1.21.0 --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.2.110

配置管理文件

主节点执行

$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config
$ export KUBECONFIG=/etc/kubernetes/admin.conf

网络准备

主节点执行

  • 下载 operator 资源清单文件
$ wget https://docs.projectcalico.org/manifests/tigera-operator.yaml
  • 应用资源清单文件
$ kubectl apply -f tigera-operator.yaml
The CustomResourceDefinition "installations.operator.tigera.io" is invalid: metadata.annotations: Too long: must have at most 262144 bytes

如果在应用资源文件时出现如上的错误,执行以下命令:

$ kubectl apply --server-side --force-conflicts -f tigera-operator.yaml
  • 通过自定义资源方式安装
$ wget https://docs.projectcalico.org/manifests/custom-resources.yaml

修改 custom-resources.yaml 文件中的 cidr 内容,修改为使用 kubeadm init ... --pod-network-cidr=10.244.0.0/16 对应的 IP 地址段

  • 应用资源清单文件
$ kubectl apply -f custom-resources.yaml
  • calico 客户端安装
$ curl -L https://github.com/projectcalico/calico/releases/download/v3.25.0/calicoctl-linux-amd64 -o calicoctl
  • 添加权限
$ chmod +x calicoctl
  • 移动到工作目录
$ mv calicoctl /usr/bin/
  • 查看版本信息
$ calicoctl version
  • 查看运行节点
$ DATASTORE_TYPE=kubernetes KUBECONFIG=~/.kube/config calicoctl get nodes

工作节点添加

  • 查看加入集群命令

主节点执行

$ kubeadm token create --print-join-command
  • 加入集群

工作节点执行

$ kubeadm join 192.168.2.110:6443 --token hj32q7.4kmg2iyfc8mo1wg6 --discovery-token-ca-cert-hash sha256:eeb5322efb0cd1db878aaba9695ea1ec9b9d739fda8bd8a86daf91f8809d8d98

验证集群可用性

主节点执行

  • 查看所有的节点
$ kubectl get node
NAME       STATUS   ROLES                  AGE   VERSION
master01   Ready    control-plane,master   56m   v1.21.0
worker01   Ready    <none>                 88s   v1.21.0
worker02   Ready    <none>                 85s   v1.21.0
  • 查看集群 pod 运行情况
kubectl get pods --all-namespaces
NAMESPACE          NAME                                     READY   STATUS    RESTARTS   AGE
calico-apiserver   calico-apiserver-7c5b4645c9-6p5sw        1/1     Running   0          17m
calico-apiserver   calico-apiserver-7c5b4645c9-9rg7q        1/1     Running   0          17m
calico-system      calico-kube-controllers-8fdfc695-5jvcg   1/1     Running   0          43m
calico-system      calico-node-6bjng                        1/1     Running   0          84s
calico-system      calico-node-7bldx                        1/1     Running   0          32m
calico-system      calico-node-tlpwc                        1/1     Running   0          81s
calico-system      calico-typha-65fd656dc8-cjpsb            1/1     Running   0          80s
calico-system      calico-typha-65fd656dc8-xxxhz            1/1     Running   0          43m
calico-system      csi-node-driver-8wg8z                    2/2     Running   0          71s
calico-system      csi-node-driver-b88lj                    2/2     Running   0          74s
calico-system      csi-node-driver-n2ffg                    2/2     Running   0          21m
kube-system        coredns-558bd4d5db-5zl67                 1/1     Running   0          56m
kube-system        coredns-558bd4d5db-zw96d                 1/1     Running   0          56m
kube-system        etcd-master01                            1/1     Running   0          56m
kube-system        kube-apiserver-master01                  1/1     Running   0          56m
kube-system        kube-controller-manager-master01         1/1     Running   0          56m
kube-system        kube-proxy-9llkd                         1/1     Running   0          56m
kube-system        kube-proxy-fbwkd                         1/1     Running   0          84s
kube-system        kube-proxy-tpmsf                         1/1     Running   0          81s
kube-system        kube-scheduler-master01                  1/1     Running   0          56m
tigera-operator    tigera-operator-cffd8458f-fr6px          1/1     Running   1          53m

🌺🌺🌺撒花!

如果本文对你有帮助,就点关注或者留个👍
如果您有任何技术问题或者需要更多其他的内容,请随时向我提问。
在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到