安装k8s集群
1 IP地址分配
⚠️ 注意:此处的集群环境
序号 | IP地址 | 主机名称 | 节点 | 备注 |
---|---|---|---|---|
1 | 192.168.2.160 | master | master | 管理节点 |
2 | 192.168.2.161 | node1 | worker | 工作节点、可升级为管理节点 |
3 | 192.168.2.162 | node2 | worker | 工作节点、可升级为管理节点 |
4 | 192.168.2.163 | node3 | worker | 数据节点、可升级为管理节点 |
⚠️ 注意:docker版本:20.10.24,为了兼容k8s版本,此版本自带docker compose
2 安装docker
2.1 配置基础环境
# (1)更新安装包
sudo apt update
# (2)配置内存
# 临时关闭虚拟内存
sudo swapoff -a
# 永久关闭虚拟内存
sudo vim /etc/fstab
# 注释掉下面一行即可
# /swap.img none swap sw 0 0
# (3)关闭防火墙
# 查看防火墙状态
systemctl status ufw
# 关闭防火墙
systemctl stop ufw
# 禁用防火墙
sudo ufw disable
2.2 安装docker
⚠️ 注意:docker版本:24.0.9
# 更新安装包
sudo apt update
# 添加Docker官方GPG密钥
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# 添加docker源
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# 查看docker稳定版列表,可省略
apt-cache madison docker-ce
# 安装docker,可以不指定版本号,默认安装最新版本
sudo apt-get install docker-ce=5:20.10.16~3-0~ubuntu-jammy
# 设置开机启动
systemctl enable docker
阿里云镜像加速
# 创建目录
sudo mkdir -p /etc/docker
# 创建文件
sudo touch daemon.json
# 编辑文件
sudo vim daemon.json
# 向文件中添加内容
{
"registry-mirrors": ["https://wh5ewvnk.mirror.aliyuncs.com"]
}
# 生效配置
sudo systemctl daemon-reload
# 重启docker
sudo systemctl restart docker
3 安装k8s
⚠️ k8s版本选择:1.24.17-00
⚠️ 选择高版本,Kubernetes 1.24 版本前,k8s使用Dockershim组件实现K8s与Docker运行时( Docker Runtime Interface ,DRI)通信。随着 Dockershim 的弃用,Kubernetes推荐使用Containerd容器运行时,不使用Docker上层,直接管理容器的生命周期底层功能,包括容器的创建、启动、停止和删除等。
3.1 安装基础环境(全部节点)
# 配置安装环境
sudo apt-get update && sudo apt-get install -y apt-transport-https
# 添加安装密钥
curl -fsSL https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
# 添加k8s镜像源
# 进入/etc/apt/sources.list.d目录下
cd /etc/apt/sources.list.d
# 创建kubernetes.list文件
sudo touch kubernetes.list
# 编辑kubernetes.list
sudo vim kubernetes.list
# 在kubernetes.list文件中添加地址如下
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
# 更新安装包
sudo apt-get update
3.2 安装containerd(全部节点)
安装基础
# 安装依赖
sudo apt-get install -y apt-transport-https ca-certificates curl
# 安装containerd
sudo apt-get -y install containerd
sudo systemctl enable containerd
sudo systemctl start containerd
# 查看状态
systemctl status containerd
创建配置
# 创建目录和配置文件,默认存在,可以不执行
sudo mkdir /etc/containerd
sudo touch /etc/containerd/config.toml
# 生成配置文件
sudo containerd config default > config.toml
# 将文件复制到/etc/containerd,覆盖原有config.toml的文件
sudo mv config.toml /etc/containerd/
# 修改配置config.toml,内容参见下文
sudo vim /etc/containerd/config.toml
# 重启containerd
sudo systemctl restart containerd
配置的内容
# 1 修改SystemdCgroup参数为true,默认为false,在文件的137行
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
……
# 修改的参数
SystemdCgroup = true
# 2 修改sandbox_image参数,值一定要与下文“kubeadm config images list --kubernetes-version=v1.24.17 --image-repository=registry.aliyuncs.com/google_containers”命令输出的pause版本和tag保持一致,否则Node节点的Pod一直 CrashLoopBackOff,并且查询 kubectl logs 时也没有任何错误,此处我的版本为阿里云3.7
# 默认参数
# sandbox_image = "registry.k8s.io/pause:3.8"
# 修改的参数
sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.7"
3.3 安装k8s(全部节点)
安装基础依赖
# 查看k8s版本号
apt-cache madison kubelet
# 安装k8s
sudo apt-get install kubelet=1.24.17-00 kubeadm=1.24.17-00 kubectl=1.24.17-00
# 设置开机启动
systemctl enable kubelet
# 查看k8s版本
kubectl version --short
# 查看kubelet状态
# Active: active (running)是启动状态
systemctl status kubelet
# 停止kubelet
systemctl stop kubelet
# 启动kubelet
systemctl start kubelet
配置容器的endpoint
# 使运行时生效
sudo crictl config runtime-endpoint unix:///run/containerd/containerd.sock
sudo crictl config image-endpoint unix:///run/containerd/containerd.sock
# 重启服务
sudo systemctl restart containerd
3.4 初始化master节点
查看镜像列表
# 查看需要的镜像
kubeadm config images list --kubernetes-version=v1.24.17 --image-repository=registry.aliyuncs.com/google_containers
初始化master节点
⚠️ 注意IP地址变化
# 注意,如果用虚拟机,内核数量必须要2个及以上。
# --image-repository 镜像加速,指定初始化下载的镜像。
# --apiserver-advertise-address 直接使用当前master主机地址
# --kubernetes-version k8s版本,可以不指定,缺省情况会用最新的
# --service-cidr service网络地址(建议使用10.96.0.0/12,也可以不设置),不可与主机,pod网络地址重复
# --pod-network-cidr pod网络地址(建议使用10.244.0.0/16),不可与主机,service网络地址重复,与后面的flannel相关
# --v 日志等级,5级以上会打印更详细的日志,--v=6开启详细日志打印
sudo kubeadm init \
--image-repository=registry.aliyuncs.com/google_containers \
--apiserver-advertise-address=192.168.2.160 \
--kubernetes-version=v1.24.17 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16 \
--v=6
初始化成功
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/
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 192.168.2.160:6443 --token s5gumt.fsd9clxhin5odbhn \
--discovery-token-ca-cert-hash sha256:0de06dce3e0792c8025a05bccef5f52b8dea3768f8eecf21dc483edfc4e67788
配置master节点
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
配置node节点
# 将节点添加到集群中
sudo kubeadm join 192.168.108.160:6443 --token s5gumt.fsd9clxhin5odbhn \
--discovery-token-ca-cert-hash sha256:0de06dce3e0792c8025a05bccef5f52b8dea3768f8eecf21dc483edfc4e67788
管理token
# 查看token
kubeadm token list
# 创建token
kubeadm token create
# 查看discovery-token-ca-cert-hash
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
3.5 安装flannel(master节点)
⚠️ 注意:在安装flannel前“kube-system coredns”是“Pending”状态。
在线安装很难成功,根据需要使用别的办法。
# 下载配置文件,可以用最新版本
wget https://github.com/flannel-io/flannel/releases/download/v0.25.5/kube-flannel.yml
# 查看flannel中的镜像
cat kube-flannel.yml |grep image|uniq
# 安装flannel
kubectl apply -f kube-flannel.yml
3.6 管理节点
# 设置节点角色
kubectl label node node1 kubernetes.io/role=worker
kubectl label node node2 kubernetes.io/role=worker
kubectl label node node3 kubernetes.io/role=worker
# 在master节点上查看集群结点
kubectl get nodes
# 删除节点
# 删除节点后,需要在相应的子节点
sudo kubectl delete nodes node1
# 重置主机点,慎重操作!!
# 手动删除配置文件
sudo rm -rf /etc/kubernetes/pki/ca.crt
sudo rm -rf /etc/kubernetes/kubelet.conf
sudo rm -rf $HOME/.kube
# 重置子节点
sudo kubeadm reset
# 重新加载配置文件
systemctl daemon-reload
# 重置子节点,使用以下命令即可
sudo kubeadm reset
3.7 简单管理pod
# 查看Pod
# -A: 显示所有Pod
kubectl get pod
# 查看全部空间下的pod
kubectl get pod --all-namespaces -o wide
# 查看Pod的更多概要信息
# -o json: 表示以json方式查看Pod详细信息
# -o yaml: 表示以yaml方式查看Pod详细信息
kubectl get pod -o wide