Kubernetes 集群搭建 v1.19.3

好久不见. 提交于 2020-12-14 10:06:05

准备开始

硬件准备

  • 一台或多台运行着下列系统的机器:
    Ubuntu 16.04+ / Debian 9+ / CentOS 7 / Red Hat Enterprise Linux (RHEL) 7 /
    Fedora 25+ / HypriotOS v1.0.1+ / Container Linux (测试 1800.6.0 版本)

  • 每台机器的内存在 2 GB 以上,CPU 2核以上
  • 集群中的所有机器的网络彼此均能相互连接(公网和内网都可以)
  • 节点之中不可以有重复的主机名、MAC 地址或 product_uuid

高能预警

  • 本文多数命令需要在所有节点上执行,所以部分只需要在某些节点上运行的会有提示,请各位读者仔细阅读后食用~

博主的虚拟机配置

CPU Memory Disk
Intel® Xeon® CPU E5-2650 @ 2.00GHz(4 核心数) 4 GB 20 GB
hostname IP
master 10.10.102.91
node01 10.10.102.92
node02 10.10.102.93

修改 Linux系统 环境配置

`关闭集群上所有主机的防火墙`
 systemctl stop firewalld.service
 systemctl disable firewalld.service

`配置 iptables 桥接及路由转发`
 cat <<EOF > /etc/sysctl.conf
 net.ipv4.ip_forward = 1
 net.bridge.bridge-nf-call-ip6tables = 1
 net.bridge.bridge-nf-call-iptables = 1
 EOF

`使刚修改的配置生效, 默认 /etc/sysctl.conf 中加载`
 sysctl -p

`关闭交换分区(如果不关闭,kubelet 服务将无法启动)`
 swapoff -a
 yes | cp /etc/fstab /etc/fstab_bak
 cat /etc/fstab_bak |grep -v swap > /etc/fstab

`关闭 selinux(如果不关闭,docker将启动容器会报错)`
 sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config

安装依赖和工具

 yum install -y yum-utils device-mapper-persistent-data lvm2 nfs-utils vim

安装容器运行时 ——Docker

  • 容器运行时是负责运行容器的软件,containerd / CRI-O / Docker 都可以作为在 Linux 上结合 Kubernetes 使用的几种通用容器运行时。本文将以最常用的 Docker 作为 Kubernetes 集群的容器运行时为例。
`添加 docker 的阿里云源`
 yum-config-manager --add-repo \
     http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

`安装 docker`
 yum install -y docker-ce-19.03.13-3.el7 docker-ce-cli-19.03.13-3.el7 containerd.io

`设置docker服务开机启动,并启动docker服务`
 sudo systemctl enable docker
 sudo systemctl start docker

安装 kubelet / kubeadm / kubectl

`配置阿里云镜像仓库`
 cat <<EOF > /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
 EOF

`安装 kubelet / kubeadm / kubectl`
 yum install -y kubelet-1.19.3-0 kubeadm-1.19.3-0 kubectl-1.19.3-0 \
 	 --disableexcludes=kubernetes  # 只从 kubernetes 仓库下载

`使用 kubeadm 初始化集群(只在master节点上执行)`
 kubeadm init \
	 --apiserver-advertise-address=10.10.102.91 \  # 设置 ApiServer
     --image-repository registry.aliyuncs.com/google_containers \
     --service-cidr=10.96.0.0/12 \  # 为服务的虚拟 IP 地址另外指定 IP 地址段
     --pod-network-cidr=10.244.0.0/16 \  # 指明 pod 网络可以使用的 IP 地址段。
     --ignore-preflight-errors=all
  • 上述命令执行会花费一定的时间,且执行完毕后,我们会看到包含如下字样的提示 (这里提醒小白千万不要对着博客闭着眼睛 Ctrl + C / V 啦~),我们复制在本机控制台上的这段话,在除master以外的节点上运行,这样就可以把子节点都加入到master节点了。
 kubeadm join 10.10.102.91:6443 --token q82kdg.swvn4tlwnib2g2x6 \
     --discovery-token-ca-cert-hash sha256:73243b4debf701be995052a8c27c8931acc47f04a9c3b7422d363352585d14c1
  • 等待上述命令执行完毕后,在master节点上执行下面的命令,子节点的名字已经出现在屏幕中了。
 kubectl get nodes
  • 但是,细心的读者会发现,子节点虽然已经加入集群,但是状态却是 <Not Ready>的。这是因为我们还没有安装网络组件。节点之间的通信依赖于网络组件,如 Fannel / Calico,接下来将以Calico为例,安装 Kubernetes 的网络组件。

安装 Calico 网络组件

`只在 master 节点执行`
`下载 calico.yaml`
 wget http://docs.projectcalico.org/v3.6/getting-started/kubernetes/installation/hosted/calico.yaml
 
`修改 CALICO_IPV4POOL_CIDR,和初始化集群时的 pod-network-cidr 参数一致`
 vim calico.yaml

`calico.yaml`
 - name: CALICO_IPV4POOL_CIDR
   value: "10.244.0.0/16" # 修改这里

`安装 calico`
 kubectl apply -f calico.yaml
  • 上述命令执行完毕需要一定的时间,我们可以执行下面的命令,待到所有的 pod 都准备就绪,一个完整的 Kubernetes 集群就已经部署完毕了
 watch kubectl get pod -n kube-system

感谢阅读。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!