k8s高可用(一)——堆叠拓扑
kubectl,kubeadm,kubelet,k8s高可用集群
前言
本笔记前提是安装号docker,容器运行时,kubectl,kubeadm,kubelet,没有k8s的安装教程(之前整理过markdown,不小心删掉了),kubectl,kubeadm,kubelet等安装可以参考下面链接
https://zhuanlan.zhihu.com/p/620460418?utm_id=0
https://blog.csdn.net/qq_33958966/article/details/136219254
官方教程
官方教程个人感觉以及很详细了,记录一下安装过程
https://kubernetes.io/zh-cn/docs/setup/production-environment/tools/kubeadm/ha-topology/
https://kubernetes.io/zh-cn/docs/setup/production-environment/tools/kubeadm/high-availability/
主机节点
至少需要三台机器:
由于etcd的原因,三台节点时容错率才为1,两台机器当即一台apiserver就不可用了(以及鉴定过了)
https://etcd.io/docs/v3.3/faq/#why-an-odd-number-of-cluster-members
- 192.168.44.135
- 192.168.44.136
- 192.168.44.137
vip 192.168.44.100
安装
kube-vip静态pod实现虚拟IP(每个节点都需要执行)
https://kube-vip.io/docs/installation/static/
https://kubernetes.io/zh-cn/docs/tasks/configure-pod-container/static-pod/
# 虚拟ip
export VIP=192.168.44.100
# 网卡
export INTERFACE=ens33
# 自定义kube-vip版本
export KVVERSION=v0.6.3
# 命令行可以使用kube-vip
alias kube-vip="docker run --network host --rm ghcr.io/kube-vip/kube-vip:$KVVERSION"
# 创建静态pod清单文件
mkdir -p /etc/kubernetes/manifests
# 生成静态pod的manifest
kube-vip manifest pod \
--interface $INTERFACE \
--address $VIP \
--controlplane \
--services \
--arp \
--leaderElection | tee /etc/kubernetes/manifests/kube-vip.yaml
可以修改kube-vip的镜像拉取规则, Always
-> IfNotPresent
image: ghcr.io/kube-vip/kube-vip:v0.6.3
imagePullPolicy: Always
k8s 使用本地镜像的时候 - imagePullPolicy:Nevel_imagepullpolicy: ifnotpresent-CSDN博客
后续等待kubelet启动后就会自动加载静态pod的内容了
安装k8s节点
leader执行操作
以yaml的形式安装
# vim ~/config.yaml
apiVersion: kubeadm.k8s.io/v1beta3
bootstrapTokens:
- groups:
- system:bootstrappers:kubeadm:default-node-token
token: abcdef.0123456789abcdef
ttl: 24h0m0s
usages:
- signing
- authentication
kind: InitConfiguration
localAPIEndpoint:
advertiseAddress: 192.168.44.135 # 领导者ip
bindPort: 6443
nodeRegistration:
criSocket: unix:///var/run/cri-dockerd.sock # 该从自己的容器运行时
imagePullPolicy: IfNotPresent
taints: null
---
apiServer:
timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta3
certificatesDir: /etc/kubernetes/pki # 证书文件位置
clusterName: kubernetes
controllerManager: {}
dns: {}
etcd:
local:
dataDir: /data/etcd # etcd工作目录
kind: ClusterConfiguration
kubernetesVersion: 1.27.3
networking:
dnsDomain: cluster.local
serviceSubnet: 10.96.0.0/12
podSubnet: 10.244.0.0/16
scheduler: {}
controlPlaneEndpoint: "192.168.44.100:6443" # 负载均衡: apiserver端口 必要的,没有就不能多master
---
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
cgroupDriver: systemd
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs
开始init
kubeadm init --config config.yml --upload-certs
其余master节点执行
kubeadm join 192.168.44.100:6443 --token abcdef.0123456789abcdef \
--discovery-token-ca-cert-hash sha256:38ffda8132b1336259118e99cbbc6941c55592f0af71c8ccb33eb6df595adb38 \
--control-plane --certificate-key 998a9ffe696e3bd1a9ec2d387e535c937cc7276e0e6d59bcc88334142f5a953e \
# 改成自己的容器运行时 前面的内容leader节点安装成功后都会显示
--cri-socket unix:///var/run/cri-dockerd.sock
后记
简单快速的记录一下,涉及很多细节,需要看文档了解概念
下一篇:两个master,一个外部etcd的高可用集群(虚拟机多了带不动,简单测试一下外部etcd拓扑,熟悉流程)
更多推荐
所有评论(0)