Kubernetes 集群搭建 v1.19.3
准备开始
硬件准备
- 一台或多台运行着下列系统的机器:
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
感谢阅读。
来源:oschina
链接:https://my.oschina.net/u/4409765/blog/4795106