k8s系列教程:搭建k8s集群环境

0、实验说明

为了节省时间,建议使用云服务器来搭建K8S。可以选择腾讯云、阿里云等。购买服务器时使用按量计费、按流量收费的方式。当实验做完之后,可以马上关机。关机之后不会收取服务器费用,只会对占用中的硬盘收费。而硬盘的价格非常低廉,隐藏学习成本比较低。

1、新建私有网络

image-20211114155329273

2、购买服务器

  • 1台 master node :2核4G(注意,master节点要求至少需要2核,否则安装会报错)

  • 2台 worker node:1核2G

购买服务器时,选择Centos系统,和教程保持一致,方便安装。

3、安装Docker环境

  1. 先卸载系统自带的docker(如果有的话)。
1
2
3
4
5
6
7
8
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
  1. 配置yum源,然yum能找到docker相关的docker安装包。
1
2
3
4
sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  1. 使用yum来安装docker,最好和我安装的版本保持一直,反之后面出现奇怪问题。
1
yum install -y docker-ce-20.10.7 docker-ce-cli-20.10.7  containerd.io-1.4.6

4、启动docker并设置为开机自启

1
systemctl enable docker --now

5、配置docker加速镜像

1
2
3
4
5
6
7
8
9
10
11
12
13
14
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://82m9ar63.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

6、系统基础配置

系统基础设置每台服务器都需要执行。

  1. 设置主机名,注意每台主机的名称必须不同。
1
2
3
hostnamectl set-hostname master-k8s
hostnamectl set-hostname worker1-8s
hostnamectl set-hostname worker2-k8s
  1. 关闭SeLinux
1
2
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
  1. 禁止使用虚拟缓存
1
2
swapoff -a  
sed -ri 's/.*swap.*/#&/' /etc/fstab
  1. ipv6流量转发设置(k8s官网推荐设置)
1
2
3
4
5
6
7
8
9
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sudo sysctl --system
  1. 为每台服务器设置master的hosts
1
2
3
4
5
#先得到master节点的内网ip,比如10.0.0.10,
ifconfig
#将将他设置到hosts中,注意3台机器都需要执行。因为每台机器都需要知道master在哪里。
echo "10.0.0.10 master-k8s" >> /etc/hosts

7、安装k8s基础环境

每台机器都要执行安装。

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
# 配置安装源
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
exclude=kubelet kubeadm kubectl
EOF

#安装软件
sudo yum install -y kubelet-1.20.9 kubeadm-1.20.9 kubectl-1.20.9 --disableexcludes=kubernetes
#启动kubelet
sudo systemctl enable --now kubelet

#下载docker 镜像备用
sudo tee ./images.sh <<-'EOF'
#!/bin/bash
images=(
kube-apiserver:v1.20.9
kube-proxy:v1.20.9
kube-controller-manager:v1.20.9
kube-scheduler:v1.20.9
coredns:1.7.0
etcd:3.4.13-0
pause:3.2
)
for imageName in ${images[@]} ; do
docker pull registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/$imageName
done
EOF

chmod +x ./images.sh && ./images.sh

8、初始化主节点

master-k8s机器上执行初始化主节点命令。

1
2
3
4
5
6
7
8
#注意,下面的172.31.0.4,10.96.0.0/16,192.168.0.0/16这3个网络范围不可以重叠冲突,这里最好不要改。
kubeadm init \
--apiserver-advertise-address=172.31.0.4 \
--control-plane-endpoint=cluster-endpoint \
--image-repository registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images \
--kubernetes-version v1.20.9 \
--service-cidr=10.96.0.0/16 \
--pod-network-cidr=192.168.0.0/16

9、创建配置文件

初始化几点成功之后,你可以看到这样的一段信息。接下来你可以让worker节点加入主集群,也可以让其他的主节点加入主集群。

不过我们先创建配置文件。

1
2
3
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

主节点初始化成功提示

10、安装网络组件

1
2
curl https://docs.projectcalico.org/manifests/calico.yaml -O
kubectl apply -f calico.yaml

11、将其他工作节点加入主集群

1
2
kubeadm join cluster-endpoint:6443 --token x5g4uy.23edestrg35r \
--discovery-token-ca-cert-hash sha256:78uhijn4efdsjk34rew0okdplku7yhtrgeiwo90it5423ewdsdsdfa

12、验证是否加入成功

1
kubectl get nodes