当前位置: 首页 > news >正文

基于 docker 部署 k8s 集群

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

文章目录

  • 基于 `docker` 部署 `k8s` 集群
    • 操作系统说明
    • 硬件配置说明
    • 主机配置
      • `IP` 设置
      • 主机名设置
      • 主机名与 `IP` 地址解析
      • 防火墙配置
      • `SELinux` 设置
      • 时间同步配置
      • 升级操作系统内核
      • 内核转发以及网桥过滤
      • 安装 `ipset` 和 `ipvsadm`
      • 关闭 `swap` 交换分区
    • 容器运行时配置
      • 获取 `yum` 源
      • 安装 `docker`
      • 修改 `cgroup` 方式
      • 启动 `docker` 服务
    • 集群部署
      • 软件说明
      • `yum` 源准备
      • 软件安装
      • 配置 `kubelet`
      • 镜像准备
      • 初始化
      • 配置管理文件
      • 网络准备
      • 工作节点添加
      • 验证集群可用性

基于 docker 部署 k8s 集群

操作系统说明

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

硬件配置说明

主机名CPU内存硬盘角色
master012c4gb100gbmaster
worker012c4gb100gbworker
worker022c4gb100gbworker

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

主机配置

IP 设置

主机名IP 地址掩码地址
master01192,168.2.110255.255.255.0
worker01192,168.2.110255.255.255.0
worker02192,168.2.110255.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

集群部署

软件说明

kubeadmkubeletkubectl
1.21.01.21.01.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

🌺🌺🌺撒花!

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

相关文章:

  • 集星云推短视频矩阵系统的定制化与私有化部署方案
  • redis在Spring中的一些使用
  • 机器学习中的线性回归:从理论到实践的深度解析
  • 企业数据安全全生命周期守护方案:从组织到技术的三维实践
  • PyTorch实战——生成对抗网络数值数据生成
  • (自用)Java学习-5.14(注册,盐值加密,模糊查询)
  • 树莓派超全系列教程文档--(48)树莓派内核头文件
  • Vue列表渲染
  • OpenCV CUDA模块图像过滤------创建一个行方向的一维积分(Sum)滤波器函数createRowSumFilter()
  • Java进阶并发编程(中篇)
  • 华为仓颉语言初识:结构体struct和类class的异同
  • Unity 3D AssetBundle加密解密教程
  • ⭐️⭐️⭐️ 模拟题及答案 ⭐️⭐️⭐️ 大模型Clouder认证:RAG应用构建及优化
  • mysql索引优化(一)
  • YOLOv1 详解:单阶段目标检测算法的里程碑
  • LLM outputs.loss 返回什么
  • 鸿蒙OSUniApp 制作简单的页面跳转与参数传递功能#三方框架 #Uniapp
  • 将网页带格式转化为PDF
  • 【2025】harbor仓库搭建
  • ORM++ 封装实战指南:安全高效的 C++ MySQL 数据库操作
  • 上海私人做网站/佛山网站建设制作公司
  • 杭州网站建设caiyiduo/seo是指什么
  • 果酷网的网站建设简介/网络营销都具有哪些功能
  • 家政行业网站建设方案/培训方案怎么做
  • 西安做网站优化/seo优化有哪些
  • 网站做的很差的案例/seo优化的网站