K8S集群搭建

  • 一、开通三个云服务器
  • 1、服务器设置
  • 2、远程连接
  • 安装Docker
  • 二、kubeadm创建集群
  • 1、基础环境
  • 2、安装kubelet、kubeadm、kubectl
  • 3、下载各个机器需要的镜像
  • 4、初始化主节点
  • 5、复制返回的命令
  • 6、安装网络组件
  • 7、加入node节点
  • 8、验证集群


一、开通三个云服务器

搭建集群我们需要三台机器,这里我选择了阿里云的云服务器,如果之前没使用过阿里云,新人可以免费使用一个月。有条件的同学可以使用其它的云服务器,或者自己用虚拟机创建三个实例。

云服务器多台设备连接 3台云服务器_云服务器多台设备连接


登录阿里云后进入云服务器ECS

云服务器多台设备连接 3台云服务器_kubernetes_02


点击免费试用 选择个人开发者

云服务器多台设备连接 3台云服务器_kubernetes_03


云服务器多台设备连接 3台云服务器_kubernetes_04


因为我已经申请过了,所以会显示我已达上限,因为免费的额度是有限的,所以我申请了一台2核8G的作为master节点,两台1核2G的作为worker节点。

云服务器多台设备连接 3台云服务器_云原生_05


最后设置到期自动释放以免产生不必要的费用,然后点击免费申请就可以创建成功。

一次只能创建一个实例,三台就重复申请三次即可。

1、服务器设置

云服务器多台设备连接 3台云服务器_云原生_06


创建完云服务器后会自动进入到管理控制台,也可以通过上面这个菜单进入。

云服务器多台设备连接 3台云服务器_阿里云_07

如图 可以看到创建的三台云服务器,点击左侧菜单的实例

云服务器多台设备连接 3台云服务器_云服务器多台设备连接_08


点击这个按钮会出现弹窗,我们选择重置密码和重置实例名称。

云服务器多台设备连接 3台云服务器_云服务器多台设备连接_09


云服务器多台设备连接 3台云服务器_kubernetes_10


填写完密码后保存即可。

云服务器多台设备连接 3台云服务器_阿里云_11


我将两台1核2G的命名为k8s-node、k8s-node2。一台2核8G的命名为k8s-master。

云服务器多台设备连接 3台云服务器_docker_12


三台都配置完成后点击重启,实例名称才会生效。

至此配置结束。

2、远程连接

这里使用xshell进行远程连接

云服务器多台设备连接 3台云服务器_云原生_13


这里填写服务器的公网ip,然后点击确定。

云服务器多台设备连接 3台云服务器_kubernetes_14

接着输入root点击确定。

云服务器多台设备连接 3台云服务器_docker_15

输入刚刚设置的密码后点击确定。三台服务器如法炮制。

云服务器多台设备连接 3台云服务器_docker_16


连接完成后,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、安装网络组件

calico官网

#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 指令查看安装情况

云服务器多台设备连接 3台云服务器_云服务器多台设备连接_17


当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

云服务器多台设备连接 3台云服务器_云原生_18

当状态为Ready时集群搭建成功