使用kubeadm搭建kubernetes集群

1、搭建三台服务器

1)服务器要求

  • 系统:Linux系统,如CentOS 7;
  • CPU:2个;
  • 内存:2 GB;
  • 磁盘空间:50GB;

2、系统初始化

注意:以下操作均需在三台服务器上执行

 ## 关闭防火墙
 systemctl stop firewalld
 systemctl disable firewalld
 ​
 ## 关闭selinux(选其一)
 sed -i 's/enforcing/disabled/' /etc/selinux/config ## 永久关闭
 setenforce 0 ## 临时关闭
 ​
 ## 关闭swap(选其一)
 swapoff -a ## 临时
 sed -ri 's/.*swap.*/#&/' /etc/fstab ## 永久
 ​
 ## 根据规划设置主机名
 hostnamectl set-hostname <hostname>
 ## 我给三台服务器分别设置为k8smaster、k8snode1、k8snode2
 ## 在k8smaster服务器上,执行
 hostnamectl set-hostname k8smaster
 ## 在k8snode1服务器上,执行
 hostnamectl set-hostname k8snode1
 ## 在k8snode2服务器上,执行
 hostnamectl set-hostname k8snode2
 ​
 ## 在master中添加hosts,将下面的IP修改为实际对应的IP
 cat >> /etc/hosts << EOF
 192.168.10.131 k8smaster
 192.168.10.132 k8snode1
 192.168.10.133 k8snode2
 EOF
 ​
 ## 将桥接的IPv4流量传递到iptables的链
 cat > /etc/sysctl.d/k8s.conf << EOF
 net.bridge.bridge-nf-call-ip6tables = 1
 net.bridge.bridge-nf-call-iptables = 1
 EOF
 sysctl --system  ## 生效
 ​
 ## 时间同步
 yum install -y ntpdate
 ntpdate time.windows.com
复制代码

3、安装Docker

注意:以下操作均需在三台服务器上执行

 ## 查看当前的内核版本,官方建议 3.10 以上,3.8以上貌似也可
 uname -r
 ​
 ## 更新 yum 包
 yum -y update
 ​
 ## 卸载旧版本(如果之前安装过的话)
 yum -y remove docker docker-common docker-selinux docker-engine
 ## 删除docker(如果之前安装过的话)
 yum remove -y containerd.io.x86_64 docker-ce.x86_64 docker-ce-cli.x86_64
 ​
 ## 安装需要的软件包, yum-util 提供yum-config-manager功能,另两个是devicemapper驱动依赖
 yum install -y yum-utils device-mapper-persistent-data lvm2
 ​
 ## 设置 yum 源(阿里仓库)
 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
 ​
 ## 查看可用版本有哪些
 yum list docker-ce --showduplicates | sort -r
 ​
 ## 选择一个版本并安装
 yum -y install docker-ce ## 安装最新版本
 yum -y install docker-ce-19.03.9 docker-ce-cli-19.03.9 containerd.io-19.03.9 ## 安装指定版本
 ​
 ## 启动 Docker 并设置开机自启
 systemctl start docker
 systemctl enable docker
 ​
 ## 设置docker国内镜像
 cat > /etc/docker/daemon.json << EOF
 {
   "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
 }
 EOF
 ​
 ## 重启docker
 systemctl restart docker
复制代码

4、添加阿里云YUM软件源

注意:以下操作均需在三台服务器上执行

 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
复制代码

5、安装kubeadmkubectlkubelet

注意:以下操作均需在三台服务器上执行

 ## kubernetes的版本需与docker一致(docker是19版本的那么kubernetes也需要装19版本的)
 yum install -y kubelet-1.19.0 kubeadm-1.19.0 kubectl-1.19.0
 systemctl enable kubelet
复制代码

6、部署master节点

以下操作仅在master节点执行

执行以下脚本:

 ## 将--apiserver-advertise-address的IP地址修改为master节点的IP地址
 kubeadm init \
 --apiserver-advertise-address=192.168.10.131 \
 --image-repository registry.aliyuncs.com/google_containers \
 --kubernetes-version v1.19.0 \
 --service-cidr=10.96.0.0/12 \
 --pod-network-cidr=10.244.0.0/16
复制代码

等待完成后,会有如下提示(还有一个节点加入的命令,下一部分会使用):

image.png
运行上述命令,指定的用户才能使用kubectl命令;

 mkdir -p $HOME/.kube
 sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
 sudo chown $(id -u):$(id -g) $HOME/.kube/config
复制代码

执行完后,查看节点:

 kubectl get nodes
复制代码

这时只能看到master节点;

7、将node节点加入集群

以下操作仅在node节点执行

master节点初始化完成后,还会提示以下指令:

image.png

在两个子节点上执行上述指令,将子节点加入集群中;

 kubeadm join 192.168.10.131:6443 --token g247ny.vcwjcmbvevxyt6jf \
     --discovery-token-ca-cert-hash sha256:82a0d9119d0b291c7229cb641b5f2fb8a241b69f1d88bad312bb64e8b7a7a4a8
复制代码

加入完成后,使用kubectl get nodes查看节点:

image.png

注意:

1、默认token有效期为24小时,当过期之后,该token就不可用了。这时就需要重新创建token,执行以下命令:kubeadm token create --print-join-command,然后将生成的token替换掉上述命令中的Token。

8、部署CNI网络插件

下载CNI网络插件:

 wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
复制代码

部署kube-flannel.yaml

 kubectl apply -f kube-flannel.yaml
复制代码

部署完成后,查看节点状态:

 kubectl get nodes
 kubectl get pods -n kube-system
复制代码

image.png

可以看到集群的状态已经变成Ready了,集群部署完成。

9、测试集群

在Kubernetes集群中创建一个pod,验证是否正常运行:

 ## 部署
 kubectl create deployment nginx --image=nginx
 ## 生成服务,对外暴露端口
 kubectl expose deployment nginx --port=80 --type=NodePort
 ## 查看信息
 kubectl get pod,svc
复制代码

image.png

image.png