当前位置: 首页 > 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.lryc.cn/news/608946.html

相关文章:

  • [硬件电路-148]:数字电路 - 什么是CMOS电平、TTL电平?还有哪些其他电平标准?发展历史?
  • Go语言实战案例:TCP服务器与客户端通信
  • 案例介绍|JSON数据格式的转换|pyecharts模块简介
  • Kafka——怎么重设消费者组位移?
  • 构建企业级Web应用:AWS全栈架构深度解析
  • AtCoder Beginner Contest 417
  • [硬件电路-147]:模拟电路 - DC/DC电压的三种架构:升压(Boost)、降压(Buck)或升降压(Buck-Boost)
  • 跨语言模型中的翻译任务:XLM-RoBERTa在翻译任务中的应用
  • 界面规范4-按钮
  • IntelliJ IDEA开发编辑器摸鱼看股票数据
  • Parcel 使用详解:零配置的前端打包工具
  • 关于车位引导及汽车乘梯解决方案的专业性、系统性、可落地性强的综合设计方案与技术实现说明,旨在为现代智慧停车楼提供高效、安全、智能的停车体验。
  • electron-多线程
  • 嵌入式——数据结构:单向链表的函数创建
  • 常见的深度学习模块/操作中的维度约定(系统性总结)
  • Docker-03.快速入门-部署MySQL
  • 介绍JAVA语言、介绍greenfoot 工具
  • 北邮:LLM强化学习架构Graph-R1
  • 【机器学习】线性回归算法详解:线性回归、岭回归、Lasso回归与Elastic Net
  • 02.Redis 安装
  • 13.Redis 的级联复制
  • kafka与其他消息队列(如 RabbitMQ, ActiveMQ)相比,有什么优缺点?
  • 《深入浅出RabbitMQ:从零基础到面试通关》
  • RabbitMQ面试精讲 Day 10:消息追踪与幂等性保证
  • 《软件测试与质量控制》实验报告三 系统功能测试
  • Flutter开发 dart异步
  • Spring lookup-method实现原理深度解析
  • [spring-cloud: 服务注册]-源码解析
  • 【Linux】linux基础开发工具(三) 版本控制器Git、调试器 - gdb/cgdb使用、一些实用的调试技巧
  • graph TD的规则