环境准备

所有节点执行

拉取dockerhub环境

环境架构

三台虚拟机,一台master、两台worker

配置主机名

去三台主机分别执行

1
2
3
hostnamectl set-hostname k8s-master && bash
hostnamectl set-hostname k8s-node1 && bash
hostnamectl set-hostname k8s-node2 && bash

配置hosts

1
2
3
4
5
cat >> /etc/hosts <<EOF
192.168.100.121 k8s-master
192.168.100.122 k8s-node1
192.168.100.123 k8s-node2
EOF

关闭防火墙和SElinux

1
2
3
systemctl stop firewalld && systemctl disable firewalld
setenforce 0
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config

关闭swap分区

1
2
swapoff -a
sed -i '/swap/s/^/#/g' /etc/fstab

配置内核参数和优化

1
2
3
4
5
6
cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
sysctl --system

安装ipset、ipvsadm

1
2
3
4
5
6
7
8
9
10
11
12
13
yum -y install conntrack ipvsadm ipset jq iptables curl sysstat libseccomp wget vim net-tools git

cat >/etc/modules-load.d/ipvs.conf <<EOF
# Load IPVS at boot
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
nf_conntrack
nf_conntrack_ipv4
EOF

systemctl enable --now systemd-modules-load.service

验证内核模块加载成功

1
lsmod | egrep "ip_vs|nf_conntrack_ipv4"

安装docker

本次实验在新开的虚拟机上,配置拉取镜像的脚本会清除所有原来的yum源和覆盖一些配置文件

不可在重要的机器上跑(或者 注释掉删除的命令 和 把覆盖改为追加)

在重要的机器上可以手动添加脚本里的配置内容

注意替换安装docke的命令

ToDockerHub脚本地址

安装依赖包

1
yum -y install yum-utils device-mapper-persistent-data lvm2

添加腾讯docker源

已在最开始的脚本中添加,记录一下添加源的命令yum-config-manager --add-repo $URL

安装docker并配置开机自启动

1
2
yum -y install docker-ce-20.10.23 docker-ce-cli-20.10.23
systemctl enable --now docker

添加阿里源docker仓库加速器(已废弃)

ToDockerHub脚本,已经配置了可以直接拉取dockerhub

安装Cri-Dockerd

安装wget

1
yum install -y wget

下载安装包并安装

这一个下载太慢了,可以复制链接去浏览器下载然后上传到虚拟机

1
2
wget -c https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.1/cri-dockerd-0.3.1-3.el7.x86_64.rpm
yum -y install cri-dockerd-0.3.1-3.el7.x86_64.rpm

配置沙盒(Pause)镜像

注意: 阿里源已被弃用,配置下一行的DockerHub源。
1
sed -i '/ExecStart/s#dockerd#& --network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9#' /usr/lib/systemd/system/cri-docker.service

配置从DockerHub拉取基础镜像

1
sed -i '/^ExecStart/s#dockerd#& --network-plugin=cni --pod-infra-container-image=registry.hub.docker.com/library/pause:3.9#' /usr/lib/systemd/system/cri-docker.service

启动Cri-Dockerd并配置自启动

1
systemctl enable --now cri-docker

完成此阶段的脚本不包含修改主机名

共两个合集

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#!/bin/bash

# -------------------- 使用须知 -------------------
echo "#################### 使用须知 ####################"
echo "1. 确保虚拟机能够联网,可通过 ping qq.com 验证。"
echo "2. 必须去最下面修改为自己的代理。"
echo "3. 应当运行在 CentOS 7.9 上。"
echo "4. 确保能够通过阿里镜像和腾讯镜像作为 yum 源安装 Docker。"
echo "5. 中途有失败的地方,手工补上,脚本会配好环境"
echo "###################################################"

# 等待用户按下回车键继续
read -p "先看以上说明,然后按下回车执行 " key

# 配置阿里云
systemctl stop firewalld
systemctl disable firewalld
rm -rf /etc/yum.repos.d/*
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/docker-ce.repo https://mirrors.cloud.tencent.com/docker-ce/linux/centos/docker-ce.repo
yum makecache
yum install epel-release -y

# 接下来是安装docker
yum -y install yum-utils device-mapper-persistent-data lvm2
yum -y install docker-ce-20.10.23 docker-ce-cli-20.10.23
systemctl enable --now docker

# 配DNS
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"dns": ["8.8.8.8", "8.8.4.4"]
}
EOF

mkdir -p /etc/systemd/system/docker.service.d
sudo tee /etc/systemd/system/docker.service.d/override.conf <<-'EOF'
[Service]
Environment="HTTPS_PROXY=http://192.168.100.1:13038"
EOF

sudo systemctl daemon-reload
sudo systemctl restart docker

# ---------------- 代理设置 ----------------
# ------------- 配置自己的代理 -------------
# 在这里配置代理
# echo "export PROXY='192.168.100.1'" >> ~/.bashrc
echo "export http_proxy='http://192.168.100.1:13038'" >> ~/.bashrc
echo "export https_proxy='https://192.168.100.1:13038'" >> ~/.bashrc
echo "export no_proxy='localhost,127.0.0.1,192.168.100.121,192.168.100.122,192.168.100.123'" >> ~/.bashrc
source ~/.bashrc
echo "http_proxy=" + $http_proxy
echo "https_proxy=" + $https_proxy
curl google.com
注意: 看注释需要上传的文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#!/bin/bash
cat >> /etc/hosts <<EOF
192.168.100.121 k8s-master
192.168.100.122 k8s-node1
192.168.100.123 k8s-node2
EOF
swapoff -a
sed -i '/swap/s/^/#/g' /etc/fstab
cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
sysctl --system
yum -y install conntrack ipvsadm ipset jq iptables curl sysstat libseccomp wget vim net-tools git

cat >/etc/modules-load.d/ipvs.conf <<EOF
# Load IPVS at boot
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
nf_conntrack
nf_conntrack_ipv4
EOF

systemctl enable --now systemd-modules-load.service
lsmod | egrep "ip_vs|nf_conntrack_ipv4"
# yum -y install yum-utils device-mapper-persistent-data lvm2
# 下载太慢了,从主机上上传
# wget -c https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.1/cri-dockerd-0.3.1-3.el7.x86_64.rpm
yum -y install cri-dockerd-0.3.1-3.el7.x86_64.rpm
sed -i '/^ExecStart/s#dockerd#& --network-plugin=cni --pod-infra-container-image=registry.hub.docker.com/library/pause:3.9#' /usr/lib/systemd/system/cri-docker.service
systemctl enable --now cri-docker

安装kubectl、kubelet、kubeadm

所有节点执行

添加谷歌kubernetes

1
2
3
4
5
6
7
8
9
cat >/etc/yum.repos.d/kubernetes.repo <<EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

查看可用版本

1
yum --showduplicates list kubelet | grep 1.28

安装指定版本

1
yum install -y kubelet-1.23.6 kubeadm-1.23.6 kubectl-1.23.6

启动kubelet

1
systemctl enable --now kubelet

完成此阶段的脚本

1
2
3
4
5
6
7
8
9
10
11
12
#!/bin/bash
cat >/etc/yum.repos.d/kubernetes.repo <<EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
yum install -y kubelet-1.23.6 kubeadm-1.23.6 kubectl-1.23.6
systemctl enable --now kubelet

初始化kubernetes集群

只需要在主节点执行

查看需要的镜像

1
kubeadm config images list --kubernetes-version=v1.23.6

一条命令拉取所需镜像,提前拉取可以加速初始化的过程

1
kubeadm config images pull --kubernetes-version=v1.23.6

初始化集群

只需要在主节点

由于配置了可以直接从dockerhub拉取镜像,所以无需再指定镜像仓库

1
2
3
4
kubeadm init --kubernetes-version=1.23.6 \
--apiserver-advertise-address=192.168.100.121 \
--service-cidr=172.15.0.0/16 --pod-network-cidr=172.16.0.0/16 \
--cri-socket unix://var/run/cri-dockerd.sock

--kubernetes-version=1.23.6:指定要安装的 Kubernetes 版本。

--apisever-advertise-address=192.168.100.121:设置 API 服务器的地址,节点将使用此地址进行通信。

--service-cidr=172.15.0.0/16:定义 Kubernetes 服务的 CIDR 范围,服务将使用此范围的 IP 地址。创建的Service就是这个网段,不可与pod冲突

--pod-network-cidr=172.16.0.0/16:指定 Pod 网络的 CIDR 范围,以便后续安装网络插件。创建的Pod就是这个网段,不可与service冲突

--cri-socket unix://var/run/cri-dockerd.sock:指定容器运行时的 socket,通常用于 Docker 或其他 CRI 兼容的运行时。

关于运行时,上面的操作提示安装了dockercontainer

报错解决参考:https://www.cnblogs.com/wangyuanguang/p/18056621