Containerd方式部署K8s集群

1.1 集群创建说明

Kubernetes支持多种容器运行时,包括Containerd、Docker和CRI-O。以下是这三种方式的详细说明:

  • Containerd:Containerd是Kubernetes默认使用的容器运行时。它是一个轻量级的容器运行时,专为Kubernetes设计,提供了高效、稳定的容器管理能力。Containerd直接与Kubernetes集群交互,无需额外的桥接层,这使得它在性能和兼容性上都表现出色。

  • Docker:尽管Kubernetes默认情况下已经废弃了对Docker的直接支持,但是通过使用Mirantis维护的cri-dockerd插件,仍然可以实现Kubernetes集群的创建。Docker作为一个全面的容器平台,提供了丰富的功能和强大的社区支持。但是,由于Kubernetes对Docker的直接支持已经停止,因此在使用Docker时可能需要对Kubelet的启动参数进行一些调整,以确保其与Docker容器运行时正确交互。

  • CRI-O:CRI-O是一个专为Kubernetes设计的轻量级容器运行时,它直接实现了Kubernetes的容器运行时接口(CRI)。使用CRI-O创建Kubernetes集群需要安装CRI-O插件,并对Kubelet的启动参数进行配置,以指定CRI-O作为容器运行时。CRI-O专为Kubernetes优化,提供了简单、高效的容器管理功能,是一个很好的选择,特别是对于希望最大化Kubernetes集群性能和资源利用率的用户

注意:

Kubernetes 1.24版本引入了许多新特性和改进,以下是一些重要的更新:

  • 从kubelet中移除dockershim:自1.20版本被弃用之后,dockershim组件终于在1.24的kubelet中被删除。这是确保Kubernetes项目未来发展的必要步骤。从1.24开始,用户需要使用其他受支持的运行时选项,例如containerd或CRI-O。如果选择Docker Engine作为运行时,则需要使用cri-dockerd插件。

  • 关闭测试版API:Kubernetes 1.24版本将一些beta版API标记为废弃,转而使用稳定版API。这是为了确保API的稳定性和向后兼容性。

  • 对发布工件进行签名:为了提高安全性,Kubernetes 1.24版本引入了对发布工件的签名验证。这意味着用户可以验证下载的Kubernetes二进制文件的完整性和来源。

  • OpenAPIv3:Kubernetes 1.24版本引入了对OpenAPIv3的支持,这是一个更现代的API描述规范,提供了更丰富的元数据和更好的API文档生成能力。

  • 正式发布存储容量和卷扩展:Kubernetes 1.24版本正式发布了存储容量和卷扩展的功能,这使得用户可以更灵活地管理存储资源,并支持动态扩展存储卷。

  • NonPreemptingPriority稳定版发布:Kubernetes 1.24版本将NonPreemptingPriority策略升级为稳定版,这使得用户可以在Pod调度时使用更多的优先级控制选项。

  • 存储插件迁移:Kubernetes 1.24版本进一步支持存储插件的迁移,提供了更多的选项和工具来帮助用户迁移到新的存储解决方案。

  • gRPC探针升级为Beta版:Kubernetes 1.24版本将gRPC探针升级为Beta版,这使得用户可以利用gRPC探针进行更高效的健康检查和故障排查。

  • Kubelet证书提供程序升级至beta版:Kubernetes 1.24版本升级了Kubelet证书提供程序到Beta版,这提供了更灵活的证书管理选项,包括自动轮换和更细粒度的权限控制。

  • 上下文日志记录进入alpha阶段:Kubernetes 1.24版本引入了上下文日志记录的alpha阶段,这为用户提供了更多的日志记录选项和灵活性。

  • 避免在向服务分配IP时发生冲突:Kubernetes 1.24版本引入了避免在向服务分配IP时发生冲突的功能,这提高了服务的可用性和稳定性。

1.2 环境规划

kubernetes集群大体上分为两类:一主多从多主多从

  • 一主多从:一台Master节点和多台Node节点,搭建简单,但是有单机故障风险,适合用于测试环境

  • 多主多从:多台Master节点和多台Node节点,搭建麻烦,安全性高,适合用于生产环境

受资源限制,本次环境一主两从

1.3 Kubernetes基础环境部署

kubernetes有多种部署方式,目前主流的方式有kubeadm、minikube、二进制包

  • minikube:一个用于快速搭建单节点kubernetes的工具

  • kubeadm:一个用于快速搭建kubernetes集群的工具

  • 二进制包 :从官网下载每个组件的二进制包,依次去安装,此方式对于理解kubernetes组件更加有效

  • K8s-all:主机名为三台都做

主机名 IP地址 系统 配置
k8s-master-01 192.168.110.21/24 CentOS 7.9 4颗CPU 8G内存 100G硬盘
K8s-node-01 192.168.110.22/24 CentOS 7.9 4颗CPU 8G内存 100G硬盘
K8s-node-02 192.168.110.23/24 CentOS 7.9 4颗CPU 8G内存 100G硬盘

注意:关闭防火墙和SElinux

1.1.1 配置hosts解析和免密钥

[root@K8s-master-01 ~]# cat >> /etc/hosts << EOF
192.168.110.21 k8s-master-01
192.168.110.22 K8s-node-01
192.168.110.23 K8s-node-02
EOF
[root@K8s-master-01 ~]# scp /etc/hosts K8s-node-01:/etc/
[root@K8s-master-01 ~]# scp /etc/hosts K8s-node-02:/etc/
​
# master节点可以免密钥访问其他节点
[root@k8s-master-01 ~]# ssh-keygen -f ~/.ssh/id_rsa -N '' -q
[root@k8s-master-01 ~]# ssh-copy-id k8s-node-01
[root@k8s-master-01 ~]# ssh-copy-id k8s-node-02

1.1.2 配置NTP时间服务

[root@K8s-master-01 ~]# sed -i '3,6 s/^/# /' /etc/chrony.conf
[root@K8s-master-01 ~]# sed -i '6 a server ntp.aliyun.com iburst' /etc/chrony.conf
[root@K8s-master-01 ~]# systemctl restart chronyd.service
[root@K8s-master-01 ~]# chronyc sources
210 Number of sources = 1
MS Name/IP address         Stratum Poll Reach LastRx Last sample               
===============================================================================
^* 201.107.6.88                  2   6    17    18   +266us[+1386us] +/-   24ms

[root@K8s-node-01 ~]# sed -i '3,6 s/^/# /' /etc/chrony.conf
[root@K8s-node-01 ~]# sed -i '6 a server ntp.aliyun.com iburst' /etc/chrony.conf
[root@K8s-node-01 ~]# systemctl restart chronyd.service
[root@K8s-node-01 ~]# chronyc sources
210 Number of sources = 1
MS Name/IP address         Stratum Poll Reach LastRx Last sample               
===============================================================================
^* 201.107.6.88                  2   6    17    18   +266us[+1386us] +/-   24ms

[root@K8s-node-02 ~]# sed -i '3,6 s/^/# /' /etc/chrony.conf
[root@K8s-node-02 ~]# sed -i '6 a server ntp.aliyun.com iburst' /etc/chrony.conf
[root@K8s-node-02 ~]# systemctl restart chronyd.service
[root@K8s-node-02 ~]# chronyc sources
210 Number of sources = 1
MS Name/IP address         Stratum Poll Reach LastRx Last sample               
===============================
### 使用 Containerd 安装 Kubernetes 集群教程 以下是基于 CentOS 7 和 Containerd 构建 Kubernetes 1.27 集群的详细指南: #### 准备工作 在开始之前,确保服务器满足以下条件: - 操作系统版本为 CentOS 7 或更高。 - 至少两台机器(一台主节点和若干个工作节点)。 --- #### 步骤说明 ##### 0. 安装 Development Tools 更新操作系统并安装开发工具包: ```bash sudo yum update -y && sudo yum groupinstall "Development Tools" -y ``` ##### 1. 禁用 Swap Swap 可能会影响 Kubernetes 节点性能,因此需要禁用它: ```bash sudo swapoff -a sudo sed -i '/swap/d' /etc/fstab ``` ##### 2. 关闭防火墙 关闭系统的防火墙服务以减少干扰: ```bash sudo systemctl stop firewalld sudo systemctl disable firewalld ``` ##### 3. 设置 SELinux 为 Permissive 模式 SELinux 默认会阻止某些容器操作,将其设置为宽松模式可以解决此问题: ```bash sudo setenforce 0 sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config ``` ##### 4. 安装 `ipset` 和 `ipvsadm` 这些工具用于支持负载均衡功能: ```bash sudo yum install ipset ipvsadm -y ``` ##### 5. 配置网桥过滤及内核转发 编辑 `/etc/sysctl.d/k8s.conf` 文件,添加如下内容: ```conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 ``` 应用更改: ```bash sudo sysctl --system ``` ##### 6. 加载必要的内核模块 加载 OverlayFS、Netfilter 等模块: ```bash cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf overlay br_netfilter EOF sudo modprobe overlay sudo modprobe br_netfilter ``` ##### 7. 安装 Containerd 下载并安装指定版本的 Containerd (v1.17.0): ```bash CONTAINERD_VERSION="1.17.0" wget https://github.com/containerd/containerd/releases/download/v${CONTAINERD_VERSION}/containerd-${CONTAINERD_VERSION}.linux-amd64.tar.gz tar Cxzvf /usr/local containerd-${CONTAINERD_VERSION}.linux-amd64.tar.gz rm -rf containerd-${CONTAINERD_VERSION}.linux-amd64.tar.gz ``` 创建 systemd 单元文件: ```ini cat <<EOF | sudo tee /usr/lib/systemd/system/containerd.service [Unit] Description=containerd container runtime Documentation=https://containerd.io After=network.target local-fs.target [Service] ExecStartPre=-/sbin/modprobe overlay ExecStart=/usr/local/bin/containerd Restart=always RestartSec=5 Delegate=yes KillMode=process OOMScoreAdjust=-999 LimitNOFILE=infinity LimitNPROC=infinity TasksMax=infinity [Install] WantedBy=multi-user.target EOF ``` 启动并启用 Containerd: ```bash sudo systemctl daemon-reload sudo systemctl enable --now containerd ``` ##### 8. 配置 Containerd 创建默认配置文件: ```bash sudo mkdir -p /etc/containerd/ containerd config default | sudo tee /etc/containerd/config.toml >/dev/null 2>&1 ``` 修改配置文件中的沙箱镜像路径为官方推荐值: ```toml [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] SystemdCgroup = true ``` 重启 Containerd 应用新配置: ```bash sudo systemctl restart containerd ``` ##### 9. 安装 Kubernetes 组件 添加 Kubernetes YUM 存储库: ```bash cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-\$basearch enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg exclude=kube* EOF ``` 安装 Kubelet、Kubeadm 和 Kubectl: ```bash sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes sudo systemctl enable --now kubelet ``` ##### 10. 初始化 Kubernetes 主节点 初始化集群时需指定 Pod 网络 CIDR 地址范围(例如 Calico 的默认值 `--pod-network-cidr=192.168.0.0/16`): ```bash sudo kubeadm init --pod-network-cidr=192.168.0.0/16 ``` 完成初始化后,按照输出提示配置 kubeconfig 文件以便管理集群: ```bash mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config ``` ##### 11. 部署网络插件 Calico 下载并部署 Calico 插件 YAML 文件: ```bash curl https://docs.projectcalico.org/manifests/calico.yaml -O kubectl apply -f calico.yaml ``` 等待几分钟直到所有 Pods 处于 Running 状态: ```bash kubectl get pods -n kube-system ``` ##### 12. 测试集群状态 确认节点已加入集群且 Ready: ```bash kubectl get nodes ``` 如果一切正常,则表示集群已经成功搭建[^1]。 --- ### 注意事项 - 如果使用其他 CNI 插件,请调整相应的网络配置参数。 - ClusterIP、NodePort 和 LoadBalancer 类型的服务依赖于 CNI 提供的功能,因此务必正确配置网络插件[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值