CentOS二进制安装包方式部署K8S集群之系统初始化

目录

一、服务器基础配置

1、修改集群节点主机名称

2、修改集群节点主机/etc/hosts文件

3、集群节点创建基础目录

4、关闭防火墙

5、关闭selinux

6、关闭swap分区

(1)、K8s-controller节点

(2)、K8s-node01节点

(3)、K8s-node02节点

7、安装时间同步服务

(1)、K8s-controller节点

(2)、K8s-node01节点

(3)、K8s-node02节点

8、加载br_netfilter模块

9、优化内核参数

(1)、K8s-controller节点

(2)、K8s-node01节点

(3)、K8s-node02节点

二、Docker组件部署

1、K8s-node01节点

(1)、下载Docker安装文件

(2)、解压Docker安装文件

(3)、创建docker.service文件

(4)、创建docker配置文件

(5)、启动docker服务

2、K8s-node02节点

(1)、下载Docker安装文件

(2)、解压Docker安装文件

(3)、创建docker.service文件

(4)、创建docker配置文件

(5)、启动docker服务


更多精彩博文详见:

《Linux系统应用运维》专栏总目录(持续更新)

《CentOS二进制安装包方式部署K8S集群之系统初始化》

《CentOS7二进制安装包方式部署K8S集群之CA根证书生成》

《CentOS7二进制安装包方式部署K8S集群之ETCD集群部署》

本文主要介绍了在CentOS 7系统下,使用二进制安装包方式部署K8S集群中主机系统初始化的相关内容。K8S集群节点规划如下:

|----------------|-----------------|-------------------------------------------------------|
| 主机名称 | IP | 部署组件 |
| K8s-controller | 192.168.110.150 | kube-apiserver、kube-controller-manager、kube-scheduler |
| K8s-node01 | 192.168.110.151 | kubelet、kube-proxy、容器运行时 |
| K8s-node02 | 192.168.110.152 | kubelet、kube-proxy、容器运行时 |

一、服务器基础配置

1、修改集群节点主机名称

  • 节点192.168.110.150:echo "K8s-controller" > /etc/hostname
  • 节点192.168.110.151:echo "K8s-node01" > /etc/hostname
  • 节点192.168.110.152:echo "K8s-node02" > /etc/hostname

2、修改集群节点主机/etc/hosts文件

  • K8s-controller节点

root@K8s-controller \~\]# cat \>\> /etc/hosts \<\< EOF 192.168.110.150 K8s-controller 192.168.110.151 K8s-node01 192.168.110.152 K8s-node02 EOF ![](https://i-blog.csdnimg.cn/direct/f7d057e26a1f4c22bb26ba49c80cd81d.png)

  • K8s-node01节点

root@K8s-node01 \~\]# cat \>\> /etc/hosts \<\< EOF 192.168.110.150 K8s-controller 192.168.110.151 K8s-node01 192.168.110.152 K8s-node02 EOF ![](https://i-blog.csdnimg.cn/direct/e534486e2a574f45bb5e3efb2d3a6dc9.png)

  • K8s-node02节点

root@K8s-node02 \~\]# cat \>\> /etc/hosts \<\< EOF 192.168.110.150 K8s-controller 192.168.110.151 K8s-node01 192.168.110.152 K8s-node02 EOF ![](https://i-blog.csdnimg.cn/direct/0f188ef70add4a39afa7a2871db23978.png)

3、集群节点创建基础目录

  • K8s-controller节点

root@K8s-controller \~\]# mkdir /K8s

  • K8s-node01节点

root@K8s-node01 \~\]# mkdir /K8s

  • K8s-node02节点

root@K8s-node02 \~\]# mkdir /K8s

4、关闭防火墙

此处为方便演示关闭防火墙,生产环境可根据实际情况开通服务器防火墙策略。

  • K8s-controller节点

root@K8s-controller \~\]# systemctl stop firewalld \&\& systemctl disable firewalld \[root@K8s-controller \~\]# systemctl stop iptables \&\& systemctl disable iptables ![](https://i-blog.csdnimg.cn/direct/c95c99346ae042aa9312604a52b1bced.png)

  • K8s-node01节点

root@K8s-node01 \~\]# systemctl stop firewalld \&\& systemctl disable firewalld \[root@K8s-node01 \~\]# systemctl stop iptables \&\& systemctl disable iptables ![](https://i-blog.csdnimg.cn/direct/ca14722de26d4b0fae7326b928453484.png)

  • K8s-node02节点

root@K8s-node02 \~\]# systemctl stop firewalld \&\& systemctl disable firewalld \[root@K8s-node02 \~\]# systemctl stop iptables \&\& systemctl disable iptables ![](https://i-blog.csdnimg.cn/direct/9bdf9d8e8f7f4d86a030532e8a1a3b4d.png)

5、关闭selinux

  • K8s-controller节点

root@K8s-controller \~\]# cat /etc/selinux/config \| grep "SELINUX=" --color \[root@K8s-controller \~\]# sed -i 's/enforcing/disabled/' /etc/selinux/config \[root@K8s-controller \~\]# getenforce \[root@K8s-controller \~\]# setenforce 0 ![](https://i-blog.csdnimg.cn/direct/3cab50524ac64c7fa6f1f3a35d7c3d60.png)

root@K8s-node01 \~\]# cat /etc/selinux/config \| grep "SELINUX=" --color \[root@K8s-node01 \~\]# sed -i 's/enforcing/disabled/' /etc/selinux/config \[root@K8s-node01 \~\]# getenforce \[root@K8s-node01 \~\]# setenforce 0 ![](https://i-blog.csdnimg.cn/direct/82f6a67647eb46df8aca230c4986711c.png)

  • K8s-node02节点

root@K8s-node02 \~\]# cat /etc/selinux/config \| grep "SELINUX=" --color \[root@K8s-node02 \~\]# sed -i 's/enforcing/disabled/' /etc/selinux/config \[root@K8s-node02 \~\]# getenforce \[root@K8s-node02 \~\]# setenforce 0 ![](https://i-blog.csdnimg.cn/direct/7f8b6b817c8d4e53a99a3338e790a16c.png)

6、关闭swap分区

(1)、K8s-controller节点
  • 使用命令关闭swap分区

root@K8s-controller \~\]# swapoff -a

  • 注释/etc/fstab文件中的swap分区挂载配置

防止开机自动挂载swap分区

root@K8s-controller \~\]# vim /etc/fstab ![](https://i-blog.csdnimg.cn/direct/e131c3c99f8c4ee08c72e90a88d07932.png)

(2)、K8s-node01节点
  • 使用命令关闭swap分区

root@K8s-node01 \~\]# swapoff -a

  • 注释/etc/fstab文件中的swap分区挂载配置

防止开机自动挂载swap分区

root@K8s-node01 \~\]# vim /etc/fstab ![](https://i-blog.csdnimg.cn/direct/2fcdd52152e44904b6e8e2dc937f6f5a.png)

(3)、K8s-node02节点
  • 使用命令关闭swap分区

root@K8s-node02 \~\]# swapoff -a

  • 注释/etc/fstab文件中的swap分区挂载配置

防止开机自动挂载swap分区

root@K8s-node02 \~\]# vim /etc/fstab ![](https://i-blog.csdnimg.cn/direct/b650708cd40b4e46afc028c3338c9933.png)

7、安装时间同步服务

安装时间同步服务,确保各个集群节点时间同步一致。

(1)、K8s-controller节点
  • 安装时间同步服务

root@K8s-controller \~\]# yum -y install chrony ![](https://i-blog.csdnimg.cn/direct/81bde7c41c4f4732b23990f446e4d361.png)

  • 开启时间同步服务

root@K8s-controller \~\]# systemctl start chronyd \&\& systemctl enable chronyd \[root@K8s-controller \~\]# systemctl status chronyd ![](https://i-blog.csdnimg.cn/direct/42ad970d7b8d4985ab316de90cc4b5ad.png)

(2)、K8s-node01节点
  • 安装时间同步服务

root@K8s-node01 \~\]# yum -y install chrony ![](https://i-blog.csdnimg.cn/direct/c58648a6f90f4a8baeba275871030c84.png)

  • 开启时间同步服务

root@K8s-node01 \~\]# systemctl start chronyd \&\& systemctl enable chronyd \[root@K8s-node01 \~\]# systemctl status chronyd ![](https://i-blog.csdnimg.cn/direct/a89503be727b408790e37c24f41522d1.png)

(3)、K8s-node02节点
  • 安装时间同步服务

root@K8s-node02 \~\]# yum -y install chrony ![](https://i-blog.csdnimg.cn/direct/3c5b86eb4815421f9a54c944805b1262.png)

  • 开启时间同步服务

root@K8s-node02 \~\]# systemctl start chronyd \&\& systemctl enable chronyd \[root@K8s-node02 \~\]# systemctl status chronyd ![](https://i-blog.csdnimg.cn/direct/0921e756a96845b1bb9cc3d390bf86c1.png)

8、加载br_netfilter模块

  • K8s-controller节点

加载br_netfilter模块

root@K8s-controller \~\]# modprobe br_netfilter **查看br_netfilter模块加载情况** \[root@K8s-controller \~\]# lsmod \| grep br_netfilter ![](https://i-blog.csdnimg.cn/direct/21b81572f7204cfba7ef5edf239c389c.png)

  • K8s-node01

加载br_netfilter模块

root@K8s-node01 \~\]# modprobe br_netfilter **查看br_netfilter模块加载情况** \[root@K8s-node01 \~\]# lsmod \| grep br_netfilter ![](https://i-blog.csdnimg.cn/direct/9b98dc2ab0394a44a25997a663e16a08.png)

  • K8s-node02

加载br_netfilter模块

root@K8s-node02 \~\]# modprobe br_netfilter **查看br_netfilter模块加载情况** \[root@K8s-node02 \~\]# lsmod \| grep br_netfilter ![](https://i-blog.csdnimg.cn/direct/0fe2e17ee0df44f5979d42d66016f759.png)

9、优化内核参数

sysctl命令在Linux中用于系统运行时检查、修改内核参数,该命令允许用户读取和修改内核参数,以便优化系统性能。

(1)、K8s-controller节点
  • 新增配置文件/etc/sysctl.d/kubernetes.conf

root@K8s-controller \~\]# cat \> /etc/sysctl.d/kubernetes.conf \<\< EOF net.bridge.bridge-nf-call-iptables=1 net.bridge.bridge-nf-call-ip6tables=1 net.ipv4.ip_forward=1 #tcp_tw_recycle与kubernetes的NAT会引起冲突导致服务不通,此处关闭。 net.ipv4.tcp_tw_recycle=0 #不检查物理内存是否够用 vm.overcommit_memory=1 #关闭不使用的ipv6协议栈,防止触发docker相关的BUG. net.ipv6.conf.all.disable_ipv6=1 EOF ![](https://i-blog.csdnimg.cn/direct/27d39c0e99de46d7a5547c700ed2b768.png) ![](https://i-blog.csdnimg.cn/direct/b5f66ea475234a12bc40cc9f130d0e0b.png) * **使配置文件/etc/sysctl.d/kubernetes.conf生效** \[root@K8s-controller \~\]# sysctl -p /etc/sysctl.d/kubernetes.conf ![](https://i-blog.csdnimg.cn/direct/8569a4a996fa4c2d9aa218165c059d85.png)

(2)、K8s-node01节点
  • 新增配置文件/etc/sysctl.d/kubernetes.conf

root@K8s-node01 \~\]# cat \> /etc/sysctl.d/kubernetes.conf \<\< EOF net.bridge.bridge-nf-call-iptables=1 net.bridge.bridge-nf-call-ip6tables=1 net.ipv4.ip_forward=1 #tcp_tw_recycle与kubernetes的NAT会引起冲突导致服务不通,此处关闭。 net.ipv4.tcp_tw_recycle=0 #不检查物理内存是否够用 vm.overcommit_memory=1 #关闭不使用的ipv6协议栈,防止触发docker相关的BUG. net.ipv6.conf.all.disable_ipv6=1 EOF ![](https://i-blog.csdnimg.cn/direct/0e6478a337f34fea928277efd2a10fb3.png) ![](https://i-blog.csdnimg.cn/direct/065bb2d0e3474d8092859ee1b65b327b.png) * **使配置文件/etc/sysctl.d/kubernetes.conf生效** \[root@K8s-node01 \~\]# sysctl -p /etc/sysctl.d/kubernetes.conf ![](https://i-blog.csdnimg.cn/direct/3ed3f262e62a420cbbc399877faf3977.png)

(3)、K8s-node02节点
  • 新增配置文件/etc/sysctl.d/kubernetes.conf

root@K8s-node02 \~\]# cat \> /etc/sysctl.d/kubernetes.conf \<\< EOF net.bridge.bridge-nf-call-iptables=1 net.bridge.bridge-nf-call-ip6tables=1 net.ipv4.ip_forward=1 #tcp_tw_recycle与kubernetes的NAT会引起冲突导致服务不通,此处关闭。 net.ipv4.tcp_tw_recycle=0 #不检查物理内存是否够用 vm.overcommit_memory=1 #关闭不使用的ipv6协议栈,防止触发docker相关的BUG. net.ipv6.conf.all.disable_ipv6=1 EOF ![](https://i-blog.csdnimg.cn/direct/8574ff918d714320910a2d724a14042c.png) ![](https://i-blog.csdnimg.cn/direct/11ad8dac144548b5bd682303f4f9794f.png) * **使配置文件/etc/sysctl.d/kubernetes.conf生效** \[root@K8s-node02 \~\]# sysctl -p /etc/sysctl.d/kubernetes.conf ![](https://i-blog.csdnimg.cn/direct/e9258c1e8505458c89b3cd24fea1f925.png)


二、Docker组件部署

Docker组件需要部署在工作负载节点,故此处只在K8s-node01节点和K8s-node02节点上部署。

1、K8s-node01节点

(1)、下载Docker安装文件

此处部署的是19.03.15版本,可根据实际环境选择相应的版本。

  • 创建docker基目录

root@K8s-node01 \~\]# mkdir -p /K8s/docker * **下载docker安装文件** \[root@K8s-node01 \~\]# cd /K8s/docker \[root@K8s-node01 docker\]# wget https://download.docker.com/linux/static/stable/x86_64/docker-19.03.15.tgz ![](https://i-blog.csdnimg.cn/direct/cbc6e762d2634208a0c5ce7cd436aa83.png)

(2)、解压Docker安装文件
  • 解压安装文件

root@K8s-node01 docker\]# tar --no-same-owner -zxvf /K8s/docker/docker-19.03.15.tgz ![](https://i-blog.csdnimg.cn/direct/d0ef40c333864b3aa5ac19eeaa0d5f75.png) * **创建docker相关可执行文件软链接** \[root@K8s-node01 docker\]# ln -s /K8s/docker/docker/\* /usr/bin/ \[root@K8s-node01 docker\]# ll /usr/bin/docker\* ![](https://i-blog.csdnimg.cn/direct/a1c102c2355d4b9c8e9285d0574ff8dc.png)

(3)、创建docker.service文件

创建/usr/lib/systemd/system/docker.service文件,通过systemd来管理docker服务。

root@K8s-node01 \~\]# cat \> /usr/lib/systemd/system/docker.service \<\< EOF \[Unit

Description=Docker Application Container Engine

Documentation=https://docs.docker.com

After=network-online.target firewalld.service

Wants=network-online.target

Service

Type=notify

ExecStart=/usr/bin/dockerd

ExecReload=/bin/kill -s HUP \$MAINPID

LimitNOFILE=infinity

LimitNPROC=infinity

LimitCORE=infinity

TimeoutStartSec=0

Delegate=yes

KillMode=process

Restart=on-failure

StartLimitBurst=3

StartLimitInterval=60s

Install

WantedBy=multi-user.target

EOF

(4)、创建docker配置文件

创建daemon.json配置文件,该文件只能放在/etc/docker/路径下。Docker在默认情况下使用的Cgroup Driver为cgroupfs,而kubernetes推荐使用systemd来代替cgoupfs。

root@K8s-node01 \~\]# cat \> /etc/docker/daemon.json \<\< EOF { "registry-mirrors": \["https://docker.mirrors.ustc.edu.cn","https://hub-mirror.c.163.com","https://0kqamue3.mirror.aliyuncs.com","https://b2dw755a.mirror.aliyuncs.com"\], "exec-opts": \["native.cgroupdriver=systemd"\], "log-driver": "json-file", "log-opts": { "max-size": "100m", "max-file": "5" } } EOF ![](https://i-blog.csdnimg.cn/direct/7357318e69cb4d109212c6edcfc5dcfe.png) ![](https://i-blog.csdnimg.cn/direct/49150d6cee4f49a9aec8abe5759cb457.png)

(5)、启动docker服务
  • 启动服务

root@K8s-node01 \~\]# systemctl daemon-reload \&\& systemctl enable docker \&\& systemctl start docker ![](https://i-blog.csdnimg.cn/direct/68a38d96cf5a4c8ab3aa370bf5759a1b.png) * **查看docker服务状态** \[root@K8s-node01 \~\]# systemctl status docker.service ![](https://i-blog.csdnimg.cn/direct/a54d8591ec014f668b2eb9de4f9189f0.png) * **查看docker服务进程信息** \[root@K8s-node01 \~\]# ps -ef \| grep -v "grep" \| grep docker --color ![](https://i-blog.csdnimg.cn/direct/670d9bd18f224a0fbe53e88f0635a543.png) * **查看docker0网桥** \[root@K8s-node01 \~\]# ip addr show docker0 ![](https://i-blog.csdnimg.cn/direct/701a6d8a36fb40f79e7e9154639ce1a6.png) * **查看docker信息** \[root@K8s-node01 \~\]# docker info ![](https://i-blog.csdnimg.cn/direct/9dbd16a3e6c640c0af91ec1b54e7ce8f.png) 从上图可以看到,Registry Mirrors选项的值与/etc/docker/daemon.json中配置的一致。

2、K8s-node02节点

(1)、下载Docker安装文件

此处部署的是19.03.15版本,可根据实际环境选择相应的版本。

  • 创建docker基目录

root@K8s-node02 \~\]# mkdir -p /K8s/docker * **下载docker安装文件** \[root@K8s-node02 \~\]# cd /K8s/docker \[root@K8s-node02 docker\]# wget https://download.docker.com/linux/static/stable/x86_64/docker-19.03.15.tgz ![](https://i-blog.csdnimg.cn/direct/e5400019a8144faf9db3a6f4bc7e54e9.png)

(2)、解压Docker安装文件
  • 解压安装文件

root@K8s-node02 docker\]# tar --no-same-owner -zxvf /K8s/docker/docker-19.03.15.tgz ![](https://i-blog.csdnimg.cn/direct/692ce9e79eff4a3aa3e38e52e0f6238b.png) * **创建docker相关可执行文件软链接** \[root@K8s-node02 docker\]# ln -s /K8s/docker/docker/\* /usr/bin/ \[root@K8s-node02 docker\]# ll /usr/bin/docker\* ![](https://i-blog.csdnimg.cn/direct/36056a3a63c54a3f94777157ff95d1fd.png)

(3)、创建docker.service文件

创建/usr/lib/systemd/system/docker.service文件,通过systemd来管理docker服务。

root@K8s-node02 \~\]# cat \> /usr/lib/systemd/system/docker.service \<\< EOF \[Unit

Description=Docker Application Container Engine

Documentation=https://docs.docker.com

After=network-online.target firewalld.service

Wants=network-online.target

Service

Type=notify

ExecStart=/usr/bin/dockerd

ExecReload=/bin/kill -s HUP \$MAINPID

LimitNOFILE=infinity

LimitNPROC=infinity

LimitCORE=infinity

TimeoutStartSec=0

Delegate=yes

KillMode=process

Restart=on-failure

StartLimitBurst=3

StartLimitInterval=60s

Install

WantedBy=multi-user.target

EOF

(4)、创建docker配置文件

创建daemon.json配置文件,该文件只能放在/etc/docker/路径下。Docker在默认情况下使用的Cgroup Driver为cgroupfs,而kubernetes推荐使用systemd来代替cgoupfs。

root@K8s-node02 \~\]# cat \> /etc/docker/daemon.json \<\< EOF { "registry-mirrors": \["https://docker.mirrors.ustc.edu.cn","https://hub-mirror.c.163.com","https://0kqamue3.mirror.aliyuncs.com","https://b2dw755a.mirror.aliyuncs.com"\], "exec-opts": \["native.cgroupdriver=systemd"\], "log-driver": "json-file", "log-opts": { "max-size": "100m", "max-file": "5" } } EOF ![](https://i-blog.csdnimg.cn/direct/746bf5964c93429eb8fb7795655c9842.png) ![](https://i-blog.csdnimg.cn/direct/816d419845d54118857926f40918b18c.png)

(5)、启动docker服务
  • 启动服务

root@K8s-node02 \~\]# systemctl daemon-reload \&\& systemctl enable docker \&\& systemctl start docker ![](https://i-blog.csdnimg.cn/direct/1b3c64045cb7430e9057428a681a31d3.png) * **查看docker服务状态** \[root@K8s-node02 \~\]# systemctl status docker.service ![](https://i-blog.csdnimg.cn/direct/20e5def6341049c58c85de9e9ecb4891.png) * **查看docker服务进程信息** \[root@K8s-node02 \~\]# ps -ef \| grep -v "grep" \| grep docker --color ![](https://i-blog.csdnimg.cn/direct/44461507bbba4a2c91dfb1b9905cfe9d.png) * **查看docker0网桥** \[root@K8s-node02 \~\]# ip addr show docker0 ![](https://i-blog.csdnimg.cn/direct/7cb7f4b028b6450f8f96f9ea734c7f7c.png) * **查看docker信息** \[root@K8s-node02 \~\]# docker info ![](https://i-blog.csdnimg.cn/direct/5f17eed1cbc34b168432fcb3651afc24.png) 从上图可以看到,Registry Mirrors选项的值与/etc/docker/daemon.json中配置的一致。

相关推荐
黄毛火烧雪下4 小时前
【Ruby 】脚本和自动化语言 常用的内容
运维·自动化·ruby
小白不想白a5 小时前
【shell】每日shell练习:安全日志入侵检测/系统配置文件合规检查
运维·服务器
洛克大航海6 小时前
Linux 中新建用户
linux·运维·服务器
落日漫游6 小时前
Nginx负载均衡:高性能流量调度指南
网络安全·微服务
三口吃掉你6 小时前
Docker安装Elasticsearch、kibana、IK分词器
elasticsearch·docker·kibana·ik分词器
dehuisun6 小时前
jenkins流水线部署springboot项目
运维·jenkins
fly五行7 小时前
Windows 系统下使用 Docker 安装 Milvus 向量数据库
windows·docker·milvus
爱宇阳7 小时前
离线环境下运行 Docker 容器编排指南
docker·容器·eureka
蜜蜜不吃糖7 小时前
解决Vcenter告警datastore存储容量不足问题
linux·运维·服务器
东城绝神7 小时前
《Linux运维总结:基于ARM64+X86_64架构CPU使用docker-compose一键离线部署redis 7.4.5容器版分片集群》
linux·运维·redis·架构·分片集群