k8s|【kubernetes篇】教你kubeadm方式搭建kubernetes 集群。单master节点集群,多master节点集群说明。


文章目录

  • kubernetes集群搭建
  • 1. 集群分类
  • 2. 集群搭建硬件要求
  • 3. 集群搭建方式
  • 4. kubeadm部署方式
    • 4.1 安装要求
    • 4.2 初始化工作
    • 4.3 安装Docker/kubeadm/kubelet
    • 4.4 部署Kubernetes Master
    • 4.5 加入Kubernetes Node
    • 4.6 部署CNI网络插件
    • 4.7 测试kubernetes集群

kubernetes集群搭建 1. 集群分类 【k8s|【kubernetes篇】教你kubeadm方式搭建kubernetes 集群。单master节点集群,多master节点集群说明。】kubernetes集群分为单Master节点集群和多Master节点集群。在实际应用中我们一般采用多Master节点集群,实现高可用。
  • 单Master节点集群模型:
k8s|【kubernetes篇】教你kubeadm方式搭建kubernetes 集群。单master节点集群,多master节点集群说明。
文章图片

  • 多Master节点集群模型
k8s|【kubernetes篇】教你kubeadm方式搭建kubernetes 集群。单master节点集群,多master节点集群说明。
文章图片

2. 集群搭建硬件要求
  • Master节点:2核,4G内存,20G磁盘
  • Node节点:4核,8G内存,40G磁盘
Master只是作为控制节点,占用资源不高,但是Node节点进行实际的业务处理等,占用资源较高。
3. 集群搭建方式 kubernetes集群一般有两种搭建方式:
  1. Kubeadm
Kubeadm是一个K8s部署工具,提供kubeadm init和kubeadm join,用于快速部署Kubernetes集群。
官方地址:https://kubernetes.io/docs/reference/setup-tools/kubeadm/
  1. 二进制包
从github下载发行版的二进制包,手动部署每个组件,组成Kubernetes集群。
两种方式比较:Kubeadm降低部署门槛,但屏蔽了很多细节,遇到问题很难排查。如果想更容易可控,推荐使用二进制包部署Kubernetes集群,虽然手动部署麻烦点,期间可以学习很多工作原理,也利于后期维护。
4. kubeadm部署方式 kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具,这个工具能通过两条指令完成一个kubernetes集群的部署。
第一、创建一个Master节点
kubeadm init

第二、将Node节点加入到当前集群中
kubeadm join

4.1 安装要求
  • 一台或多台机器,操作系統CentOS7.x-86_ x64
  • 硬件配置: 2GB或更多RAM,2核CPU或更多CPU,硬盘30GB或更多
  • 可以访问外网,需要拉取镜像,如果服务器不能上网,需要提前下载境像并导入节点
  • 禁止swap分区
我这里使用虚拟机来模拟三台服务器,分别作为master节点和node节点
k8s|【kubernetes篇】教你kubeadm方式搭建kubernetes 集群。单master节点集群,多master节点集群说明。
文章图片

节点属性 ip
master 192.168.237.136
node1 192.168.237.137
node2 192.168.237.139
4.2 初始化工作 关闭防火墙
systemctl stop firewalld systemctl disable firewalld

关闭selinux
sed -i 's/fenforcing/disabled/' /etc/selinux/config# 永久 setenforce 0 # 临时

关闭swap
swapoff -a # 临时 sed -ri 's/. *swap. */#&/' /etc/fstab# 永久

根据规划设置主机名
hostnamectl set-hostname

在master节点添加hosts(只在master节点执行)
cat >> /etc/hosts << EOF 192.168.237.136 master1# ip 主机名称 192.168.237.137 worker1 192.168.237.139 worker2 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 ntpdate -y ntpdate -u ntp.api.bz

4.3 安装Docker/kubeadm/kubelet Kubernetes默认CRI (容器运行时) 为Docker,因此先安装Docker
4.3.1 安装Docker
参考之前的文章即可
https://blog.csdn.net/weixin_45842494/article/details/123013040
4.3.2 添加阿里云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

4.3.3 安装kubeadm , kubelet和kubectl
yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0# 指定版本,根据需要选择 systemctl enable kubelet# 设置开机启动

4.4 部署Kubernetes Master 在主节点(Master)执行
kubeadm init \ --apiserver-advertise-address=192.168.237.136 \ --image-repository registry.aliyuncs.com/google_containers \ --kubernetes-version v1.18.0 \ --service-cidr=10.96.0.0/12 \ --pod-network-cidr=10.244.0.0/16# 这些网段没严格要求,和当前网段不冲突就行

k8s|【kubernetes篇】教你kubeadm方式搭建kubernetes 集群。单master节点集群,多master节点集群说明。
文章图片

看到提示信息中有Your Kubernetes control-plane has initialized successfully!表示成功了,同时使用docker images可以看到拉取的镜像。
使用kubectl工具(在提示信息中有,复制即可)
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/configkubectl get nodes

k8s|【kubernetes篇】教你kubeadm方式搭建kubernetes 集群。单master节点集群,多master节点集群说明。
文章图片

4.5 加入Kubernetes Node 在工作节点(Node)中执行
向集群添加新节点,执行在kubeadm init输出的kubeadm join命令
# 这些内容根据提示写 kubeadm join 192.168.237.136:6443 --token 82lknt.d9fg3q0dnl17zc6d \ --discovery-token-ca-cert-hash sha256:1c95dcbc9104363f14061d6f5bb3a38dc21c5cec12a884017f5790b388ee6ba3

k8s|【kubernetes篇】教你kubeadm方式搭建kubernetes 集群。单master节点集群,多master节点集群说明。
文章图片

默认token有效期为24小时,当过期之后,该token就不可用了。这时就需要重新创建token,操作如下:
kubeadm token create --print-join-command

从图中看出目前是NotReady的状态,需要加入CNI网络插件
4.6 部署CNI网络插件
kubectl apply -f https://docs.projectcalico.org/v3.10/manifests/calico.yaml

[root@master1 ~]# kubectl get nodes NAMESTATUSROLESAGEVERSION master1Readymaster43mv1.18.0 worker1Ready30mv1.18.0 worker2Ready29mv1.18.0 [root@master1 ~]# kubectl get pods -n kube-system NAMEREADYSTATUSRESTARTSAGE calico-kube-controllers-57546b46d6-zls4k1/1Running02m45s calico-node-9n9hj1/1Running02m45s calico-node-brrsq1/1Running02m45s calico-node-l79q81/1Running02m45s coredns-7ff77c879f-64z5h1/1Running044m coredns-7ff77c879f-mprbq1/1Running044m etcd-master11/1Running045m kube-apiserver-master11/1Running045m kube-controller-manager-master11/1Running045m kube-proxy-52ldf1/1Running031m kube-proxy-sb2sc1/1Running044m kube-proxy-xvqvh1/1Running031m kube-scheduler-master11/1Running045m [root@master1 ~]#

k8s|【kubernetes篇】教你kubeadm方式搭建kubernetes 集群。单master节点集群,多master节点集群说明。
文章图片

状态为Running
4.7 测试kubernetes集群 在Kubernetes集群中创建一个pod,验证是否正常运行:
kubectl create deployment nginx --image=nginxkubectl expose deployment nginx --port=80 --type=NodePortkubectl get pod,svc

[root@master1 ~]# kubectl create deployment nginx --image=nginx deployment.apps/nginx created [root@master1 ~]# kubectl expose deployment nginx --port=80 --type=NodePort service/nginx exposed [root@master1 ~]# kubectl get pod NAMEREADYSTATUSRESTARTSAGE nginx-f89759699-nntwg1/1Running078s [root@master1 ~]# kubectl get pod,svc NAMEREADYSTATUSRESTARTSAGE pod/nginx-f89759699-nntwg1/1Running02m49sNAMETYPECLUSTER-IPEXTERNAL-IPPORT(S)AGE service/kubernetesClusterIP10.96.0.1443/TCP54m service/nginxNodePort10.106.109.10980:30179/TCP2m3s [root@master1 ~]#

k8s|【kubernetes篇】教你kubeadm方式搭建kubernetes 集群。单master节点集群,多master节点集群说明。
文章图片

注意这里端口号是30179
外网访问:NodeIp:Port
k8s|【kubernetes篇】教你kubeadm方式搭建kubernetes 集群。单master节点集群,多master节点集群说明。
文章图片

当然使用主节点ip也是可以的。
k8s|【kubernetes篇】教你kubeadm方式搭建kubernetes 集群。单master节点集群,多master节点集群说明。
文章图片

单master节点集群搭建完成。后面我们会讲解多master 节点集群搭建。关注我哦。
微信公众号先已开通,搜索 “江小南和他的小伙伴们” 就能找到我哦,各位小伙伴们可以关注一下,文章会进行同步更新,方便查看哦。

    推荐阅读