前言

本笔记前提是安装号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拓扑,熟悉流程)

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐