系列文章目录
第一章 kubernetes1.24部署
第二章 选择docker作为容器运行时
第三章 选择containerd作为容器运行时
第四章 选择cri-o作为容器运行时
第五章 网络插件flannel部署
第六章 网络插件calico部署
第七章 网络插件cilium部署
文章目录
kubernetes的安装和部署
1.kubernetes环境要求
1.1 环境要求
-
一台兼容的Linux主机。kubernetes项目为基于Debian和RedHat的Linux发行版以及一些不提供包管理器的发行版提供统一的指令。
-
每台机器2GB或更多的RAM(如果内存小于2GB将会影响应用的运行内存)。
-
2核CPU(或者更多)。
-
集群中的所有机器的网络彼此能相互连接(公网和内网都可以)。
-
节点之中不能有重复的主机名、MAC地址或product_uuid。
//获取主机名 # hostname //获取网络接口的MAC地址命令来检验是否重复 # ip link //或 # ifconfig -a //校验product_uuid 命令 # sudo cat /sys/class/dmi/id/product_uuid
一般来讲,硬件设备会拥有唯一的MAC地址,但是有些虚拟机的MAC地址可能会重复。 Kubernetes 使用这些值来确定集群中的节点是否唯一。
如果这些值在每个节点上不唯一,可能会导致安装失败
-
确认机器上某些端口未占用。端口详情请点击此处查看
//确认命令 # netstat -anp
-
禁用交换分区。为了保证kubelet正常工作,必须要禁用交换分区。(确认方法和禁用方法后面有说明)
1.2 参考
以下是我安装kuberneets集群时的 环境参考(一个master节点和两个worker节点)。
节点名 | IP | 系统以及版本 |
---|---|---|
master2 | 192.168.10.92 | Ubuntu 20.04 |
worker21 | 192.168.10.12 | Ubuntu 20.04 |
worker22 | 192.168.10.202 | Ubuntu 20.04 |
//查看节点名 # uname -a //查看系统版本 # cat /proc/version
2.安装kubernetes前环境的准备(所有节点)
2.1配置/etc/hosts文件
在/etc/hosts文件的后面加上所有机器的IP和主机名(原文件内容不用更改,在文件内容的末尾加上即可)
# vi /etc/hosts
192.168.10.92 master2
192.168.10.12 worker21
192.168.10.202 worker22
注意:IP和主机名根据环境修改
2.2允许iptables检查桥接流量
确保 br_netfilter 模块被加载,这一操作可以通过运行 lsmod | grep br_netfilter 来完成。若要显式加载该模块,可执行 sudo modprobe br_netfilter。
命令:
//查看模块是否生效:
# lsmod | grep br_netfilter
//增加模块:
# sudo modprobe br_netfilter
2.3 配置网桥过滤,内核转发
配置如下:
# vim /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward=1
//生效:
# sysctl -p /etc/sysctl.d/k8s.conf
2.4关闭防火墙和禁用交换分区
关闭防火墙:
# sudo ufw disable
查看防火墙状态:Inactive为关闭
# sudo ufw status
Status: inactive
禁用交换分区:
# swapoff -a
//启用交换分区命令 # swapon -a
查看分区状态:
# free -h
//Swap后面的值为0,则为禁用状态
total used free shared buff/cache available
Mem: 3.8Gi 792Mi 180Mi 2.0Mi 2.9Gi 2.8Gi
Swap: 0B 0B 0B
3.安装kubernetes(kubectl、kubelet、kubeadm)
- 更新 apt 包索引并安装使用 Kubernetes apt 仓库所需要的包:
# sudo apt-get update
# sudo apt-get install -y apt-transport-https ca-certificates curl
- 下载Google Cloud 公开签名秘钥
# sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
- 添加 Kubernetes apt 仓库:
# echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
- 更新 apt 包索引,安装 kubelet、kubeadm 和 kubectl,并锁定其版本:kubernetes版本偏差策略请访问网站:版本偏差策略 | Kubernetes
# sudo apt-get update
//不指定版本则为安装最新版本
# sudo apt-get install -y kubelet kubeadm kubectl
# sudo apt-mark hold kubelet kubeadm kubectl
- apt-mark hold 设置不自动更新
- 指定版本例如:
sudo apt-get install -y kubelet=1.24.0 kubeadm=1.24.0 kubectl=1.24.0
4.选择运行时来部署kubernetes集群
在这里我们提供了几种运行时的安装和根据我环境的一些配置:
安装好运行时后,需要配置一下kubernetes运行时crictl工具。
使用cri-o作为容器运行时的时候,会自动配置crictl.yaml文件,请跳过下方配置。
# vim /etc/crictl.yaml
//写入如下内容
runtime-endpoint: unix:///var/run/containerd/containerd.sock //uxix端口的信息根据运行时修改
image-endpoint: unix:///var/run/containerd/containerd.sock //uxix端口的信息根据运行时修改
timeout: 10
debug: false
pull-image-on-create: false
5.下载并且配置好运行时后,接下来开始初始化kuernetes集群
5.1预先拉取镜像(可选)
在初始化kubernetes集群之前,我们可以选择性的预先拉取初始化集群所需要的镜像,避免在初始化kubernetes集群时因为网络问题拉取镜像失败。
在拉取镜像之前我们可以使用命令查看部署kubernetes集群所需要的镜像列表:
# kubeadm config images list
镜像列表默认显示镜像为最新的版本,如果要查看指定版本,只需要加上参数即可,例如我们要查看kubernetes的1.24.0版本:
# kubeadm config images list --kubernetes-version=v1.24.0 k8s.gcr.io/kube-apiserver:v1.24.0 k8s.gcr.io/kube-controller-manager:v1.24.0 k8s.gcr.io/kube-scheduler:v1.24.0 k8s.gcr.io/kube-proxy:v1.24.0 k8s.gcr.io/pause:3.7 k8s.gcr.io/etcd:3.5.3-0 k8s.gcr.io/coredns/coredns:v1.8.6
确认好镜像及其版本无误后,我们可以使用命令拉取镜像:
# kubeadm config images pull
当然,在这里也可以用kubernetes-version
参数指定拉取镜像的版本:
# kubeadm config images pull --kubernetes-version=v1.24.0
5.2 初始化kubrnetes集群(只在master上操作)
初始化kubernetes集群所需要的镜像拉取完毕后,可以使用kubeadm工具来初始化kubernetes集群。
在初始化集群的过程中,kubeadm会自动检测本地的镜像,如果有,则会跳过拉取镜像的过程。
初始化集群的命令:
# kubeadm init
我们可以在kubeadm init命令后加一些参数,来达到我们的目的。
//指定kubernetes的版本,例如: # kubeadm init --kubernetes-version=v1.24.0 //指定pod网络可以使用的IP地址段,例如: # kubeadm init --pod-network-cidr=10.244.0.0/16 //通过配置文件来初始化集群,例如: # kubeadm init --config kubeadm.yml //当不止一个运行时的情况下,使用此参数选择运行时,例如: # kubeadm init --cri-socket unix:///var/run/cri-dockerd.sock 更多参数可以用kubeadm init --help查看
成功示例片段如下:
.......
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:
kubeadm join 192.168.10.86:6443 --token or66qf.b5mpkyxput8vem51 \
--discovery-token-ca-cert-hash sha256:cef7b46b409ba83e94c2eea7fed648ae0d8f19f71e5af1ff1cb85d14e1bee281 \
--control-plane
成功后需要根据打印出的信息来投几条命令:
# mkdir -p $HOME/.kube
# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
# sudo chown $(id -u):$(id -g) $HOME/.kube/config
# export KUBECONFIG=/etc/kubernetes/admin.conf
5.3worker节点加入集群(只在worker上操作)
初始化集群成功后,控制台会打印出集群的token令牌,我们在worker上投此命令,让worker节点加入集群:
//例如
# kubeadm join 192.168.10.92:6443 --token dxwj7q.3qnta31tg7xq9s2t --discovery-token-ca-cert-hash sha256:f8e82fb53bcaa428b2abe1c8eac28960bf2186b9ba4b47871921056fedc22ea7
此令牌具有时效性(可设置),默认为24小时,如果令牌失效或找不到了,可以使用如下命令重新获取:
# kubeadm token create --print-join-command
如果不只有一个运行时,那么需要在后面加上--cri-socket string
参数。
kubeadm token
的其他参数(包括设置时效的参数)请查看这里。
6.安装网络插件(只在master操作)
下面提供了三种网络插件的安装部署方法,可选择一种来作为集群的网络插件。更多详细信息请点击链接。
6.1 选择flannel作为集群的网络插件
下载部署flannel网络插件:
# wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
//部署
# kubectl apply -f kube-flannel.yml
6.2 选择calico作为集群的网络插件
下载部署calico网络插件:
//下载
# curl https://projectcalico.docs.tigera.io/manifests/calico.yaml -O
//部署
# kubectl apply -f calico.yaml
6.3 选择cilium作为集群的网络插件
下载部署cilium网络插件:
先下载cilium CTL,通过cilium CTL来安装cilium
- cilium CTL部署:
# CILIUM_CLI_VERSION=$(curl -s https://raw.githubusercontent.com/cilium/cilium-cli/master/stable.txt)
- 设置CLI_ARCH变量
# CLI_ARCH=amd64
# if [ "$(uname -m)" = "aarch64" ]; then CLI_ARCH=arm64; fi
- 下载文件
# curl -L --fail --remote-name-all https://github.com/cilium/cilium-cli/releases/download/${CILIUM_CLI_VERSION}/cilium-linux-${CLI_ARCH}.tar.gz{,.sha256sum}
- 校验文件的完整性
# sha256sum --check cilium-linux-${CLI_ARCH}.tar.gz.sha256sum
- 解压且删除解压文件
# sudo tar xzvfC cilium-linux-${CLI_ARCH}.tar.gz /usr/local/bin
# rm cilium-linux-${CLI_ARCH}.tar.gz{,.sha256sum}
- 安装cilium:
# cilium install
7.验证集群(master上操作)
最后可以使用命令来验证和检查集群。
# kubectl get nodes
# kubectl get pods -A
# kubectl get svc -A
编辑时间:2022-8-19