K8S集群搭建
- 一、开通三个云服务器
- 1、服务器设置
- 2、远程连接
- 安装Docker
- 二、kubeadm创建集群
- 1、基础环境
- 2、安装kubelet、kubeadm、kubectl
- 3、下载各个机器需要的镜像
- 4、初始化主节点
- 5、复制返回的命令
- 6、安装网络组件
- 7、加入node节点
- 8、验证集群
一、开通三个云服务器
搭建集群我们需要三台机器,这里我选择了阿里云的云服务器,如果之前没使用过阿里云,新人可以免费使用一个月。有条件的同学可以使用其它的云服务器,或者自己用虚拟机创建三个实例。
登录阿里云后进入云服务器ECS
点击免费试用 选择个人开发者
因为我已经申请过了,所以会显示我已达上限,因为免费的额度是有限的,所以我申请了一台2核8G的作为master节点,两台1核2G的作为worker节点。
最后设置到期自动释放以免产生不必要的费用,然后点击免费申请就可以创建成功。
一次只能创建一个实例,三台就重复申请三次即可。
1、服务器设置
创建完云服务器后会自动进入到管理控制台,也可以通过上面这个菜单进入。
如图 可以看到创建的三台云服务器,点击左侧菜单的实例
点击这个按钮会出现弹窗,我们选择重置密码和重置实例名称。
填写完密码后保存即可。
我将两台1核2G的命名为k8s-node、k8s-node2。一台2核8G的命名为k8s-master。
三台都配置完成后点击重启,实例名称才会生效。
至此配置结束。
2、远程连接
这里使用xshell进行远程连接
这里填写服务器的公网ip,然后点击确定。
接着输入root点击确定。
输入刚刚设置的密码后点击确定。三台服务器如法炮制。
连接完成后,ping一下另外两台的私网地址看看是否能够ping通。是私网IP不是公网IP
安装Docker
连接完成在3台服务器上安装容器运行环境docker。
执行以下指令:
1.移除以前daocker相关包
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2.配置yum源
sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3.安装docker
sudo yum install -y docker-ce docker-ce-cli containerd.io
#以下是在安装k8s的时候使用
yum install -y docker-ce-20.10.7 docker-ce-cli-20.10.7 containerd.io-1.4.6
4.启动
systemctl enable docker --now
5.配置加速
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
只需要修改registry-mirrors参数值即可,在个人阿里云的容器与镜像服务中查看镜像加速器地址。
二、kubeadm创建集群
- 安装完容器运行环境Docker后 开始安装k8s的基础环境。
- 每台机器 2 GB 或更多的 RAM (如果少于这个数字将会影响你应用的运行内存)
- 集群中的所有机器的网络彼此均能相互连接(公网和内网都可以)
- 设置防火墙放行规则
- 设置不同hostname
- 内网互信
- 禁用交换分区。为了保证 kubelet 正常工作,你必须禁用交换分区。
1、基础环境
所有的机器执行以下操作
#各个机器设置自己的域名 如k8s-node (在阿里云服务器修改过名称的可跳过这条)
hostnamectl set-hostname xxxx
#设置防火墙放行规则 将 SELinux 设置为 permissive 模式(相当于将其禁用)
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
#关闭swap 禁用交换分区
swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab
#允许 iptables 检查桥接流量
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
2、安装kubelet、kubeadm、kubectl
所有的机器执行以下操作
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
sudo systemctl enable --now kubelet
kubelet 现在每隔几秒就会重启,因为它陷入了一个等待 kubeadm 指令的死循环
3、下载各个机器需要的镜像
所有机器执行
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
4、初始化主节点
所有机器执行
#所有机器添加master域名映射,以下需要修改为自己的master IP地址
echo "172.26.0.4 cluster-endpoint" >> /etc/hosts
执行完后任意机器ping cluster-endpoint 是否ping通
注意:以下只有主节点执行!
-apiserver-advertise-address这条也需要更换为自己的master IP地址
所有机器的网络范围不能和最后两条有重叠
#注意!只有主节点执行 主节点初始化
kubeadm init \
--apiserver-advertise-address=172.26.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
#注意所有机器的网络范围不能和最后两条有重叠
5、复制返回的命令
初始化 执行成功后会返回类似下面的一长串命令
把返回的命令全部复制下来。
Your Kubernetes control-plane has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Alternatively, if you are the root user, you can run:
export KUBECONFIG=/etc/kubernetes/admin.conf
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
You can now join any number of control-plane nodes by copying certificate authorities
and service account keys on each node and then running the following as root:
#在上面这段英文下的是Master节点的指令,需要高可用设置的同学可以多配几台master节点
kubeadm join cluster-endpoint:6443 --token hums8f.vyx71prsg74ofce7 \
--discovery-token-ca-cert-hash sha256:a394d059dd51d68bb007a532a037d0a477131480ae95f75840c461e85e2c6ae3 \
--control-plane
Then you can join any number of worker nodes by running the following on each as root:
#在上面这段英文下的是worker节点的指令,把你自己返回保存复制下来的 在worker节点执行
kubeadm join cluster-endpoint:6443 --token hums8f.vyx71prsg74ofce7 \
--discovery-token-ca-cert-hash sha256:a394d059dd51d68bb007a532a037d0a477131480ae95f75840c461e85e2c6ae3
注意我在上面代码中的注释,第7步需要用到对应的你自己机器返回的指令
6、安装网络组件
#k8s 1.20 最大只能使用v3.21的版本 这里使用3.20
curl https://docs.projectcalico.org/archive/v3.20/manifests/calico.yaml
kubectl apply -f calico.yaml
执行完 在主节点使用kubectl get pod -A 指令查看安装情况
当STATUS为Running 且REDY数量为1表示安装成功。状态不会立即变成Running的,需要稍等几分钟。
7、加入node节点
第5步复制的语句中有添加master节点的命令,也有添加Worker节点的命令
以下是我的指令,你们需要用到自己机器返回的指令
Then you can join any number of worker nodes by running the following on each as root:
#在上面这段英文下的是worker节点的指令,把你自己返回保存复制下来的 在worker节点执行
kubeadm join cluster-endpoint:6443 --token hums8f.vyx71prsg74ofce7 \
--discovery-token-ca-cert-hash sha256:a394d059dd51d68bb007a532a037d0a477131480ae95f75840c461e85e2c6ae3
这里我把两台node节点机器加入了Worker节点。需要配置高可用集群(多master节点)的
在这一步执行对应的master指令即可
8、验证集群
用以下指令在master节点验证集群
kubectl get nodes
当状态为Ready时集群搭建成功