《Kubernetes部署篇:Ubuntu20.04基于containerd二进制部署K8S 1.24.12集群(多主多从)》

本文档详细介绍了如何在Ubuntu20.04上使用containerd二进制文件部署多主多从Kubernetes 1.24.12集群,包括环境准备、证书生成、etcd集群部署、负载均衡高可用、containerd容器引擎安装以及Kubernetes组件的逐个部署和集群测试。
摘要由CSDN通过智能技术生成

一、架构图

如下图所示:
在这里插入图片描述


二、环境信息

1、部署规划

主机名 IP地址 操作系统 内核版本 软件 说明
etcd01 192.168.1.49 Ubuntu 20.04.5 LTS 5.15.0-69-generic etcd etcd节点
etcd02 192.168.1.51 Ubuntu 20.04.5 LTS 5.15.0-69-generic etcd etcd节点
etcd03 192.168.1.97 Ubuntu 20.04.5 LTS 5.15.0-69-generic etcd etcd节点
k8s-master-62 192.168.1.62 Ubuntu 20.04.5 LTS 5.15.0-69-generic cri-containerd-cni、kubectl、kube-apiserver、kube-controller-manager、kube-scheduler、kubelet、kube-proxy master节点
k8s-master-63 192.168.1.63 Ubuntu 20.04.5 LTS 5.15.0-69-generic cri-containerd-cni、kubectl、kube-apiserver、kube-controller-manager、kube-scheduler、kubelet、kube-proxy master节点
k8s-worker-64 192.168.1.64 Ubuntu 20.04.5 LTS 5.15.0-69-generic cri-containerd-cni、kubelet、kube-proxy worker节点
k8s-worker-65 192.168.1.65 Ubuntu 20.04.5 LTS 5.15.0-69-generic cri-containerd-cni、kubelet、kube-proxy worker节点
nginx-lb-01 192.168.1.220 Ubuntu 20.04.5 LTS 5.15.0-69-generic kubectl、nginx、keepalived 负载均衡主节点
nginx-lb-02 192.168.1.221 Ubuntu 20.04.5 LTS 5.15.0-69-generic kubectl、nginx、keepalived 负载均衡从节点
- 192.168.1.110 - - - 负载均衡VIP

2、软件信息

软件 版本 说明
etcd v3.5.6 二进制文件
cri-containerd-cni 1.6.12 二进制文件
crictl 1.26.1 二进制文件
kubectl、kube-apiserver、kube-controller-manager、kube-scheduler、kubelet、kube-proxy 1.24.12 二级制文件
coredns v1.8.6 容器镜像
calico v3.25.0 容器镜像
pause 3.7 容器镜像
cfssl 1.6.3 二进制文件
cfssljson 1.6.3 二进制文件
cfssl-certinfo 1.6.3 二进制文件

3、集群网段

宿主机 集群Pod网段 集群Service网段
192.168.1.0/24 10.48.0.0/16 10.96.0.0/16

说明:定义10.96.0.10为CoreDNS的Service IP地址。

4、服务端口

服务名称 端口默认值 参数 协议 端口 必须开启 说明
kube-apiserver 6443 –secure-port TCP(HTTPS) 安全端口 -
kube-controller-manager 10257 –secure-port TCP(HTTPS) 安全端口 建议开启 认证与授权
kube-scheduler 10259 –secure-port TCP(HTTPS) 安全端口 建议开启 认证与授权
kubelet 10248 –healthz-port TCP(HTTP) 健康检测端口 建议开启 -
kubelet 10250 –port TCP(HTTPS) 安全端口 认证与授权
kubelet 10255 –read-only-port TCP (HTTP) 非安全端口 建议开启 -
kube-proxy 10249 –metrics-port TCP(HTTP) 指标端口 建议开启 -
kube-proxy 10256 –healthz-port TCP(HTTP) 健康检测端口 建议开启 -
NodePort 30000-36000 –service-node-port-range TCP/UDP - - -
etcd 2379 - TCP - - etcd客户端请求端口
etcd 2380 - TCP - - etcd节点之间通信端口

三、初始化环境

3.1、配置主机名

说明:分别在对应的节点IP上设置主机名。

root@lolaage-virtual-machine:~#  hostnamectl set-hostname etcd01
root@lolaage-virtual-machine:~#  hostnamectl set-hostname etcd02
root@lolaage-virtual-machine:~#  hostnamectl set-hostname etcd03
root@lolaage-virtual-machine:~#  hostnamectl set-hostname k8s-master-62
root@lolaage-virtual-machine:~#  hostnamectl set-hostname k8s-master-63
root@lolaage-virtual-machine:~#  hostnamectl set-hostname k8s-worker-64
root@lolaage-virtual-machine:~#  hostnamectl set-hostname k8s-worker-65
root@lolaage-virtual-machine:~#  hostnamectl set-hostname nginx-lb-01
root@lolaage-virtual-machine:~#  hostnamectl set-hostname nginx-lb-02

3.2、配置主机名映射

说明:以下操作无论是etcd节点、master节点、worker节点、Nginx负载均衡节点均需要执行。

cat >> /etc/hosts <<EOF
192.168.1.49 etcd01
192.168.1.51 etcd02
192.168.1.97 etcd03
192.168.1.62 k8s-master-62
192.168.1.63 k8s-master-63
192.168.1.64 k8s-worker-64
192.168.1.65 k8s-worker-65
192.168.1.220 nginx-lb-01
192.168.1.221 nginx-lb-02
EOF

3.3、关闭防火墙

说明:以下操作无论是etcd节点、master节点、worker节点、Nginx负载均衡节点均需要执行。

systemctl stop ufw && systemctl disable ufw
ufw status
ufw disable

3.4、设置ulimit

说明:以下操作无论是etcd节点、master节点、worker节点、Nginx负载均衡节点均需要执行。

ulimit -SHn 65535
cat >> /etc/security/limits.conf <<EOF
root soft nofile 65535
root hard nofile 65535
root soft nproc 65535
root hard nproc 65535
* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535
EOF

3.5、关闭selinux

说明:以下操作无论是etcd节点、master节点、worker节点、Nginx负载均衡节点均需要执行。

apt install selinux-utils
apt install policycoreutils
sed -i 's#SELINUX=permissive#SELINUX=disabled#g' /etc/selinux/config
sestatus -v

说明:如果selinux默认关闭则无需修改。


3.6、禁用虚拟内存

说明:以下操作无论是etcd节点、master节点、worker节点、Nginx负载均衡节点均需要执行。

swapoff -a
sed -i 's/^\/swapfile\(.*\)$/#\/swapfile \1/g' /etc/fstab

3.7、配置时间同步

说明:以下操作无论是etcd节点、master节点、worker节点、Nginx负载均衡节点均需要执行。

1、设置时区为Asia/Shanghai,如果已经是则请忽略

root@k8s-master-62:~# timedatectl
               Local time: 五 2023-03-31 14:11:36 CST
           Universal time: 五 2023-03-31 06:11:36 UTC
                 RTC time: 五 2023-03-31 06:11:36    
                Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: yes                       
              NTP service: active                    
          RTC in local TZ: no  

2、使用chrony同步时间

root@k8s-master-62:~# apt install chrony -y
root@k8s-master-62:~# vim /etc/chrony/chrony.conf
server ntp.aliyun.com minpoll 4 maxpoll 10 iburst
server ntp1.aliyun.com minpoll 4 maxpoll 10 iburst
#pool ntp.ubuntu.com        iburst maxsources 4
#pool 0.ubuntu.pool.ntp.org iburst maxsources 1
#pool 1.ubuntu.pool.ntp.org iburst maxsources 1
#pool 2.ubuntu.pool.ntp.org iburst maxsources 2

root@k8s-master-62:~# systemctl enable chronyd.service 
root@k8s-master-62:~# systemctl restart chronyd.service
root@k8s-master-62:~# systemctl status chronyd.service

阿里云NTP服务器地址列表,状态检测如下所示:
在这里插入图片描述

然后就是chrony客户端上的一些常用命令:

#查看可用的时间同步源
chronyc sources -v
 
#查看时间同步源的状态
chronyc sourcestats -v
 
#对客户端系统时间进行强制同步
chronyc -a makestep

3.8、配置内核参数

说明:以下操作只需要在master节点和worker节点执行。

说明:有一些ipv4的流量不能走iptables链,因为linux内核的一个过滤器,每个流量都会经过他,然后再匹配是否可进入当前应用进程去处理,所以会导致流量丢失。配置k8s.conf文件,如下所示:

cat <<EOF | tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
modprobe overlay
modprobe br_netfilter
cat <<EOF | tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1
EOF
sysctl --system

3.9、启用ipvs模块

说明:以下操作只需在master节点和worker节点执行。

说明:kube-proxy开启ipvs的前提需要加载以下的内核模块

ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
nf_conntrack_ipv4

注意:如果出现modprobe: FATAL: Module nf_conntrack_ipv4 not found in directory /lib/modules/5.15.0-69-generic错误,这是因为使用了高内核,当前内核版本为5.15.0-69-generic,在高版本内核已经把nf_conntrack_ipv4替换为nf_conntrack了。

1、安装ipvs

apt -y install ipvsadm ipset sysstat conntrack

2、加载内核模块脚本

cat > /etc/profile.d/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
EOF

3、执行加载模块脚本

chmod 755 /etc/profile.d/ipvs.modules
bash /etc/profile.d/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4

四、生成证书和软件包下载

4.1、下载软件包

1、下载etcd

wget https://github.com/etcd-io/etcd/releases/download/v3.5.6/etcd-v3.5.6-linux-amd64.tar.gz

2、下载cri-containerd-cni

wget https://github.com/containerd/containerd/releases/download/v1.6.12/cri-containerd-1.6.12-linux-amd64.tar.gz

3、下载crictl客户端工具

wget https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.26.1/crictl-v1.26.1-linux-amd64.tar.gz

4、下载Kubernetes二进制包

wget https://dl.k8s.io/v1.24.12/kubernetes-server-linux-amd64.tar.gz
#或者(新地址)
wget https://storage.googleapis.com/kubernetes-release/release/v1.24.12/kubernetes-server-linux-amd64.tar.gz

4.2、生成k8s相关证书

说明:以下列出了基于cfssl工具集的两种生产k8s相关证书的方式,一种为手动,一种为自动。这里使用自动方式在k8s-master-62主机上生成所有证书文件。

方法一:《Kubernetes证书篇:手动生成二进制kubernetes集群相关证书》》

方法二:《Kubernetes证书篇:基于cfssl工具集一键生成二进制kubernetes集群相关证书(方法一)》

1、编辑env.conf文件
Ubuntu 20.04二进制部署 Kubernetes 可以按照以下步骤进行: 1. 下载所需的 Kubernetes 二进制文件: ``` $ wget https://storage.googleapis.com/kubernetes-release/release/v1.22.0/kubernetes-server-linux-amd64.tar.gz ``` 这里下载的是 Kubernetes v1.22.0 版本的二进制文件,你也可以下载其他版本。 2. 解压文件并将二进制文件复制到 `/usr/local/bin` 目录中: ``` $ tar -xvf kubernetes-server-linux-amd64.tar.gz $ cd kubernetes $ sudo cp server/bin/kube-apiserver /usr/local/bin/ $ sudo cp server/bin/kube-controller-manager /usr/local/bin/ $ sudo cp server/bin/kube-scheduler /usr/local/bin/ $ sudo cp server/bin/kubectl /usr/local/bin/ ``` 3. 创建 Kubernetes 的配置文件: ``` $ mkdir -p $HOME/.kube $ echo 'apiVersion: v1\nkind: Config\nclusters:\n- cluster:\n server: http://127.0.0.1:8080\n name: local\ncontexts:\n- context:\n cluster: local\n user: ""\n name: local\ncurrent-context: local\nusers: []' > $HOME/.kube/config ``` 4. 启动 Kubernetes 组件: ``` $ kube-apiserver --insecure-bind-address=0.0.0.0 --insecure-port=8080 & $ kube-controller-manager & $ kube-scheduler & ``` 5. 验证 Kubernetes 是否部署成功: ``` $ kubectl version ``` 如果输出类似于以下内容,则表示 Kubernetes 部署成功: ``` Client Version: version.Info{Major:"1", Minor:"22", GitVersion:"v1.22.0", GitCommit:"c2b52b299e3f0f152e7dee58d6b4d28f135876ce", GitTreeState:"clean", BuildDate:"2021-08-04T17:15:18Z", GoVersion:"go1.16.6", Compiler:"gc", Platform:"linux/amd64"} Server Version: version.Info{Major:"1", Minor:"22", GitVersion:"v1.22.0", GitCommit:"c2b52b299e3f0f152e7dee58d6b4d28f135876ce", GitTreeState:"clean", BuildDate:"2021-08-04T17:07:26Z", GoVersion:"go1.16.6", Compiler:"gc", Platform:"linux/amd64"} ``` 注意:这种部署方式不适用于生产环境,仅适用于测试和学习。在生产环境中,建议使用 Kubernetes 发行版或云服务商的 Kubernetes 服务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东城绝神

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值