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

  • 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

  • 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

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

  • K8s-node01节点

root@K8s-node01 \~# systemctl stop firewalld && systemctl disable firewalld

root@K8s-node01 \~# systemctl stop iptables && systemctl disable iptables

  • K8s-node02节点

root@K8s-node02 \~# systemctl stop firewalld && systemctl disable firewalld

root@K8s-node02 \~# systemctl stop iptables && systemctl disable iptables

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

  • K8s-node01节点

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

  • 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

6、关闭swap分区

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

root@K8s-controller \~# swapoff -a

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

防止开机自动挂载swap分区

root@K8s-controller \~# vim /etc/fstab

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

root@K8s-node01 \~# swapoff -a

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

防止开机自动挂载swap分区

root@K8s-node01 \~# vim /etc/fstab

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

root@K8s-node02 \~# swapoff -a

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

防止开机自动挂载swap分区

root@K8s-node02 \~# vim /etc/fstab

7、安装时间同步服务

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

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

root@K8s-controller \~# yum -y install chrony

  • 开启时间同步服务

root@K8s-controller \~# systemctl start chronyd && systemctl enable chronyd

root@K8s-controller \~# systemctl status chronyd

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

root@K8s-node01 \~# yum -y install chrony

  • 开启时间同步服务

root@K8s-node01 \~# systemctl start chronyd && systemctl enable chronyd

root@K8s-node01 \~# systemctl status chronyd

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

root@K8s-node02 \~# yum -y install chrony

  • 开启时间同步服务

root@K8s-node02 \~# systemctl start chronyd && systemctl enable chronyd

root@K8s-node02 \~# systemctl status chronyd

8、加载br_netfilter模块

  • K8s-controller节点

加载br_netfilter模块

root@K8s-controller \~# modprobe br_netfilter

查看br_netfilter模块加载情况

root@K8s-controller \~# lsmod | grep br_netfilter

  • K8s-node01

加载br_netfilter模块

root@K8s-node01 \~# modprobe br_netfilter

查看br_netfilter模块加载情况

root@K8s-node01 \~# lsmod | grep br_netfilter

  • K8s-node02

加载br_netfilter模块

root@K8s-node02 \~# modprobe br_netfilter

查看br_netfilter模块加载情况

root@K8s-node02 \~# lsmod | grep br_netfilter

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

  • 使配置文件/etc/sysctl.d/kubernetes.conf生效

root@K8s-controller \~# sysctl -p /etc/sysctl.d/kubernetes.conf

(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

  • 使配置文件/etc/sysctl.d/kubernetes.conf生效

root@K8s-node01 \~# sysctl -p /etc/sysctl.d/kubernetes.conf

(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

  • 使配置文件/etc/sysctl.d/kubernetes.conf生效

root@K8s-node02 \~# sysctl -p /etc/sysctl.d/kubernetes.conf


二、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

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

root@K8s-node01 docker# tar --no-same-owner -zxvf /K8s/docker/docker-19.03.15.tgz

  • 创建docker相关可执行文件软链接

root@K8s-node01 docker# ln -s /K8s/docker/docker/* /usr/bin/

root@K8s-node01 docker# ll /usr/bin/docker*

(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

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

root@K8s-node01 \~# systemctl daemon-reload && systemctl enable docker && systemctl start docker

  • 查看docker服务状态

root@K8s-node01 \~# systemctl status docker.service

  • 查看docker服务进程信息

root@K8s-node01 \~# ps -ef | grep -v "grep" | grep docker --color

  • 查看docker0网桥

root@K8s-node01 \~# ip addr show docker0

  • 查看docker信息

root@K8s-node01 \~# docker info

从上图可以看到,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

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

root@K8s-node02 docker# tar --no-same-owner -zxvf /K8s/docker/docker-19.03.15.tgz

  • 创建docker相关可执行文件软链接

root@K8s-node02 docker# ln -s /K8s/docker/docker/* /usr/bin/

root@K8s-node02 docker# ll /usr/bin/docker*

(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

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

root@K8s-node02 \~# systemctl daemon-reload && systemctl enable docker && systemctl start docker

  • 查看docker服务状态

root@K8s-node02 \~# systemctl status docker.service

  • 查看docker服务进程信息

root@K8s-node02 \~# ps -ef | grep -v "grep" | grep docker --color

  • 查看docker0网桥

root@K8s-node02 \~# ip addr show docker0

  • 查看docker信息

root@K8s-node02 \~# docker info

从上图可以看到,Registry Mirrors选项的值与/etc/docker/daemon.json中配置的一致。

相关推荐
ai产品老杨5 分钟前
Docker分布式部署与GB28181/RTSP全协议汇聚:基于源码交付的异构边缘计算AI视频管理平台架构解析
docker·容器·架构
蹉跎岁月新5 分钟前
Jenkins创建一个maven-project
运维·jenkins·maven
张忠琳15 分钟前
【kubernetes v1.21】(五)Kubelet 组件超深度分析
云原生·架构·kubernetes·kubelet
xier_ran16 分钟前
【infra之路】模块三:Kubernetes (上) — 概念、集群搭建、Pod 与 Deployment
云原生·容器·kubernetes
原来是猿17 分钟前
性能测试(1)
运维·服务器·python·压力测试
IT策士18 分钟前
第 23篇 k8s之Pod:多容器 Pod 与设计模式(Sidecar 等)
设计模式·容器·kubernetes
ai产品老杨24 分钟前
解耦视频流利器:如何利用 GB28181 与 RTSP 协议统一收敛多厂商设备?一套支持 Docker 部署与源码交付的边缘计算 AI 视频中台深度解析
人工智能·docker·边缘计算
为思念酝酿的痛9 小时前
POSIX信号量
linux·运维·服务器·后端
专业白嫖怪9 小时前
什么是docker
运维·docker·容器
人还是要有梦想的10 小时前
linux下用搜狗输入法,中英文切换
linux·运维·服务器