当前位置: 首页 > news >正文

k8s+isulad 国产化技术栈云原生技术栈搭建3-master节点安装

官网参考文档:iSulad+k8s环境部署 | 文档 | openEuler社区

1.  按照官网步骤初始化安装环境,安装配置必备的组件

2. 安装keepalived,并配置高可用(配置脚本在第一篇中已写过,不做赘述)

3. 下载k8s安装镜像,因为墙的原因,国内直接访问registry.k8s.io地址访问不了,必须通过国内镜像“曲线救国”,脚本如下,通过 sudo chmod + ./install.sh 给脚本添加执行权限,直接运行 sudo ./install.sh 便可完成镜像拉取工作。官网使用k8smx我没拉下来,我不知道是网络问题还是什么原因,这里我用的别的镜像地址。

#!/bin/bash#这里设置了下拉镜像的版本号v1.29.1 可以根据自己的需求修改mapfile -t images < <(sudo kubeadm config images list --kubernetes-version v1.29.1 | sed "s/registry.k8s.io/k8s.m.daocloud.io/g")
for src_img in "${images[@]}"; dodest_img=$(echo "$src_img" | sed "s|k8s.m.daocloud.io|registry.k8s.io|g")sudo isula pull "$src_img"sudo isula tag "$src_img" "$dest_img"sudo isula rmi "$src_img"
done;

4. 下载calico网络插件的镜像,你可以换别的网络插件,这里我用的是calico,执行方法同上。

// pull-calico.sh#!/bin/bash
# 这里可以根据自己想要的版本修改
sudo isula pull docker.m.daocloud.io/calico/apiserver:v3.30.2
sudo isula pull docker.m.daocloud.io/calico/whisker-backend:v3.30.2
sudo isula pull docker.m.daocloud.io/calico/whisker:v3.30.2
sudo isula pull docker.m.daocloud.io/calico/goldmane:v3.30.2
sudo isula pull docker.m.daocloud.io/calico/typha:v3.30.2
sudo isula pull docker.m.daocloud.io/calico/node-driver-registrar:v3.30.2
sudo isula pull docker.m.daocloud.io/calico/csi:v3.30.2
sudo isula pull docker.m.daocloud.io/calico/pod2daemon-flexvol:v3.30.2
sudo isula pull docker.m.daocloud.io/calico/node:v3.30.2
sudo isula pull docker.m.daocloud.io/calico/kube-controllers:v3.30.2
sudo isula pull docker.m.daocloud.io/calico/cni:v3.30.2

5. 配置kubeadm-config.yaml文件  因为这里涉及高可用和自定义的pods运行网络规划,还有版本和镜像地址的修改等多项配置,直接用官网的

# kubeadm init --kubernetes-version v1.20.2 --cri-socket=/var/run/isulad.sock --pod-network-cidr=[指定pod分配IP段]

初始化命令不能解决当前的配置环境。所以我自己写了一个配置文件,大家可以根据自己的环境需求自行修改。

apiVersion: kubeadm.k8s.io/v1beta3
kind: InitConfiguration
nodeRegistration:criSocket: "unix:///var/run/isulad.sock"
localAPIEndpoint:advertiseAddress: 22.12.70.140bindPort: 6443
---
apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
controlPlaneEndpoint: "22.12.70.140:6443"
apiServer:certSANs:- 22.12.70.140- 22.12.70.141- 22.12.70.142- 22.12.70.143- k8s-isulad-master1- k8s-isulad-master2- k8s-isulad-master3extraArgs:authorization-mode: Node,RBACtimeoutForControlPlane: 4m0s
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns: {}
etcd:local:dataDir: /var/lib/etcd
imageRepository: registry.k8s.io
kubernetesVersion: v1.29.1
networking:dnsDomain: cluster.localpodSubnet: 22.244.0.0/16serviceSubnet: 10.96.0.0/12
scheduler: {}

这里的k8s-isulad-master1、k8s-isulad-master2、k8s-isulad-master3 分别是我配置的3个高可用master节点。

6、 执行初始化

kubeadm init --config kubeadm-config.yaml --upload-certs --skip-phases=preflight 

这里使用了--skip-phases 目的是初始化时系统,跳过预检查,不然系统会按照kubeadm config images list的结果重新去拉取镜像,因为网络不可达,就卡死那了。或者命令不会正常执行。

使用 --upload-certs 目的是获取master节点的秘钥,不然初始化成功后只打印worker节点的join命令,不会体现master节点的秘钥信息。

7. 重置或秘钥过期重新查看(非必要执行步骤)

如果安装不成功,需要在初始化前重置系统,情况上次安装的配置信息,不然系统不能正常安装。

sudo kubeadm reset -f 
sudo rm -rf /etc/kubernetes/pki /var/lib/etcd  /etc/cni/net.d/
# 删除残留容器或pods
sudo crictl ps -a  #查看如果没有残留pod下面命令无须执行
sudo crictl stopp "pod-id" # 如何当前的pod在Running状态需要先暂停pod才能删除
sudo crictl rmpp "pod-id"  # 如果全部处于不运行状态可以使用 --all 参数
# 查看确保pods全部为空,有时候使用crictl 不能直接删除,可以用isula试试
sudo crictl podssudo isula ps -a
sudo isula stop "pod-id"
sudo isula rm "pod-id"#重启服务
sudo systemctl restart isulad
sudo systemctl restart kubelet#如果有故障可以通过下面命令查看日志信息
# 查看kubelet收集的apiserver容器日志
sudo journalctl -u kubelet -n 100 --no-pager | grep apiserver

join秘钥过期 master节点查看命令 kubeadm init phase upload-certs --upload-certs

worker节点查看命令

kubeadm token create --print-join-command

8、安装网络插件

参考官网文档:Calico quickstart guide | Calico Documentation

wget https://raw.githubusercontent.com/projectcalico/calico/v3.30.2/manifests/tigera-operator.yamlwget https://raw.githubusercontent.com/projectcalico/calico/v3.30.2/manifests/custom-resources.yaml// vim custom-resources.yamlapiVersion: operator.tigera.io/v1
kind: Installation
metadata:name: default
spec:# Configures Calico networking.calicoNetwork:ipPools:- name: default-ipv4-ippoolblockSize: 26cidr: 22.244.0.0/16         //配置成自己的网络encapsulation: VXLANCrossSubnetnatOutgoing: EnablednodeSelector: all()imagePullSecrets: []variant: Calicoregistry: docker.m.daocloud.io  // 设置国内镜像拉取地址
---# This section configures the Calico API server.
# For more information, see: https://docs.tigera.io/calico/latest/reference/installation/api#operator.tigera.io/v1.APIServer
apiVersion: operator.tigera.io/v1
kind: APIServer
metadata:name: default
spec: {}---# Configures the Calico Goldmane flow aggregator.
apiVersion: operator.tigera.io/v1
kind: Goldmane
metadata:name: default---# Configures the Calico Whisker observability UI.
apiVersion: operator.tigera.io/v1
kind: Whisker
metadata:name: default

kubectl apply -f tigera-operator.yaml
kubectl apply -f custom-resources.yaml// 使用命令查看网络启动状态
watch kubectl get tigerastatus
// 这个状态就正常了
NAME        AVAILABLE   PROGRESSING   DEGRADED   SINCE
apiserver   True        False         False      23h
calico      True        False         False      4h50m
goldmane    True        False         False      23h
ippools     True        False         False      23h
whisker     True        False         False      23h

9、初始化成功后添加新的master节点 

在其他节点运行

sudo kubeadm join 22.12.70.140:6443 --token ctldnb.nxhq79u0t6fh6aoo --cri-socket="unix:///var/run/isulad.sock" --discovery-token-ca-cert-hash sha256:722f3d0c6ad078d52fc3307ff9b363bac6cb255aff7dbc31cb99dc02d44acb9e --control-plane --certificate-key bbe3cf27bc8cea21da2d9b990a552413382a0dc250a99a8a46aea830caf33910 --skip-phases=preflight// 这里--certificate-key 值就为kubeadm init phase upload-certs --upload-certs得到的结果
// 当前步骤不用需要执行kubeadm init phase upload-certs --upload-certs,因为初始化成功后系统自动打印--certificate-key的值

添加新节点。

执行这一步的前提是其他master节点上已经正常执行了1~4步。

在第一个节点上使用kubectl get node 可以看到第二个master节点加入,但是状态处于NoReady状态,是因为网络服务还还没有正常启动。

可以使用watch kubectl get tigerastatus 命令在master1上查看,第一栏都是true就说明运行起来了

可以通过kubectl get pod -A 查看系统各个pod都运行正常吗,如果正常说明master节点安装成功,参考上述步骤继续添加第三个节点。

http://www.dtcms.com/a/312286.html

相关文章:

  • 查找位置函数
  • 垃圾收集器G1ZGC详解
  • 2025年渗透测试面试题总结-2025年HW(护网面试) 77-1(题目+回答)
  • 2025年渗透测试面试题总结-2025年HW(护网面试) 76-1(题目+回答)
  • set和map使用
  • 技巧|SwanLab记录混淆矩阵攻略
  • express-jwt报错:Error: algorithms should be set
  • 【智能体cooragent】不同的单智能体调用的大模型的推理的输入与输出
  • 笔试——Day26
  • 【LLM】如何在Cursor中调用Dify工作流
  • Makefile 从入门到精通:自动化构建的艺术
  • 【Java基础知识 16】 数组详解
  • 微积分思想的严密性转变 | 极限、逼近与程序化
  • 计算机技术与软件专业技术资格(水平)考试简介
  • 【Pytorch✨】LSTM01 入门
  • 集成电路学习:什么是HAL硬件抽象层
  • 【设计模式】 3.设计模式基本原则
  • 对于考研数学的理解
  • 【攻防实战】记一次DOUBLETROUBLE攻防实战
  • build文件夹下面的主要配置文件
  • win10任务栏出问题了,原来是wincompressbar导致的
  • 扫雷游戏完整代码
  • RK3399 启动流程 --从复位到系统加载
  • Munge 安全认证和授权服务的工作原理,以及与 Slurm 的配合
  • 【python】转移本地安装的python包
  • vue3 新手学习入门
  • 【LeetCode 热题 100】(三)滑动窗口
  • 在线任意长度大整数计算器
  • 轻量级鼠标右键增强工具 MousePlus
  • 数据链路层、NAT、代理服务、内网穿透