【愚公系列】2022年04月 Kubernetes容器集群快速部署之kind高可用集群

2023-10-15 10:20

本文主要是介绍【愚公系列】2022年04月 Kubernetes容器集群快速部署之kind高可用集群,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 一、kind配置HA高可用集群
    • 1.配置文件
    • 2.创建集群
    • 3.查看集群信息
    • 4.查看集群节点列表
    • 5.部署nginx服务
      • 5.1 加载镜像到集群
      • 5.2 查看集群镜像是否存在
      • 5.3 部署
  • 二、节点的添加
    • 1.master节点添加到cluster
      • 1.1 同步证书文件
      • 1.2 其他master加入集群
    • 2.将node节点添加到cluster
  • 总结


一、kind配置HA高可用集群

k8s普通搭建出来只是单master节点,如果该节点挂掉,则整个集群都无法调度,K8s高可用集群是用多个master节点加负载均衡节点组成,外层再接高可用分布式存储集群例如ceph集群,实现计算能力+存储能力的高可用,同时,etcd也可以独立出来用外部的etcd集群。因为存手工部署k8s高可用集群比较麻烦,所以使用kind来部署。

Kubernetes集群组件主要有如下:

  • etcd 一个高可用的K/V键值对存储和服务发现系统
  • flannel 实现夸主机的容器网络的通信
  • kube-apiserver 提供kubernetes集群的API调用
  • kube-controller-manager 确保集群服务
  • kube-scheduler 调度容器,分配到Node
  • kube-proxy 提供网络代理服务
  • kubeadm:用来初始化集群的指令
  • kubectl: 用来与集群通信的命令行工具。通过kubectl可以部署和管理应用,查看各种资源,创建、删除和更新各种组件
  • kubelet 运行在集群中的每个节点上,用来启动 pod 和 container 等

k8s集群高可用,一般是etcd、kube-apiserver、kube-controller-manager、kube-scheduler服务组件的高可用。

1.配置文件

kind-example-config.yaml配置案例如下:

kind: Cluster 
apiVersion: kind.x-k8s.io/v1alpha4 
nodes: - role: control-plane - role: control-plane - role: worker - role: worker 

在这里插入图片描述

2.创建集群

kind create cluster --name yg-ha --config kind-ha.yml

在这里插入图片描述

3.查看集群信息

kubectl cluster-info --context yg-ha

在这里插入图片描述

4.查看集群节点列表

kubectl get nodes

在这里插入图片描述

5.部署nginx服务

5.1 加载镜像到集群

kind load docker-image nginx:1.12 --name yg-ha

在这里插入图片描述

5.2 查看集群镜像是否存在

docker exec -it yg-ha-control-plane bash
crictl img

在这里插入图片描述

5.3 部署

使用下方代码创建一个 nginx.yml 文件,然后使用 kubectl apply -f nginx.yml 就可以完成部署了

apiVersion: apps/v1 
kind: Deployment 
metadata: name: nginx-deployment labels: app: nginx 
spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.12 ports: - containerPort: 80 

查看当前 deployment 的状态

kubectl get deployment

在这里插入图片描述
查看pod运行详细信息

kubectl get nodes -o wide

在这里插入图片描述
由于我们没有做服务暴露,所以是不能直接访问对应的服务的,我们可以用 kubectl提供的端口转发功能来讲流量从本地转发给 k8s 集群

kubectl port-forward nginx-deployment-84fc49578f-28sth 30080:80

访问nginx地址:http://localhost:30080
在这里插入图片描述

二、节点的添加

1.master节点添加到cluster

1.1 同步证书文件

将node1证书文件复制到其他master节点node2,node3

for host in node2 node3
do
echo ">>>>>>>>>>>>>>>>>>>>$host<<<<<<<<<<<<<<<<<<<<<"
ssh $host "mkdir -p /etc/kubernetes/pki/etcd"
scp /etc/kubernetes/pki/ca.* $host:/etc/kubernetes/pki/
scp /etc/kubernetes/pki/sa.* $host:/etc/kubernetes/pki/
scp /etc/kubernetes/pki/front-proxy-ca.* $host:/etc/kubernetes/pki/
scp /etc/kubernetes/pki/etcd/ca.* $host:/etc/kubernetes/pki/etcd/
scp /etc/kubernetes/admin.conf $host:/etc/kubernetes/
done

1.2 其他master加入集群

查看master的token

kubeadm token list | grep authentication,signing | awk '{print $1}'

查看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/^.* //'

注意:token有效期是有限的,如果旧的token过期,可以使用kubeadm token create --print-join-command重新创建一条token。

分别在master1和master2 执行下面的命令来加入集群,注意要修改token和ca-cert-hash为上面查询出来的结果

kubeadm join 130.252.10.233:8443 --token abcdef.0123456789abcdef \
--discovery-token-ca-cert-hash sha256:4d95989174b67c857bed7313750e021f07ec56beb2e6e764c7ef2de5645187e9 \
--experimental-control-plane --ignore-preflight-errors=Swap
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

2.将node节点添加到cluster

kubeadm join 130.252.10.233:8443 --token abcdef.0123456789abcdef \
--discovery-token-ca-cert-hash sha256:4d95989174b67c857bed7313750e021f07ec56beb2e6e764c7ef2de5645187e9 \
--ignore-preflight-errors=Swap

总结

kind 在创建集群的时候实际上使用的是 kubeadm 所以还可以修改 kubeadm 的配置来修改默认的镜像地址,节点标签污点等信息,除此之外还可以配置 PV/PVC CNI 插件等配置,如果有需求的话可以查阅 kind 的官方文档

不过要注意的是 kind 不支持给运行的集群添加节点,如果需要多节点集群的话得提前规划好节点数量或者使用Karmada,Karmada是依赖于kind 创建集群的,基于kind的再次封装可以支持节点的加入。

这篇关于【愚公系列】2022年04月 Kubernetes容器集群快速部署之kind高可用集群的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/217035

相关文章

python管理工具之conda安装部署及使用详解

《python管理工具之conda安装部署及使用详解》这篇文章详细介绍了如何安装和使用conda来管理Python环境,它涵盖了从安装部署、镜像源配置到具体的conda使用方法,包括创建、激活、安装包... 目录pytpshheraerUhon管理工具:conda部署+使用一、安装部署1、 下载2、 安装3

Spring核心思想之浅谈IoC容器与依赖倒置(DI)

《Spring核心思想之浅谈IoC容器与依赖倒置(DI)》文章介绍了Spring的IoC和DI机制,以及MyBatis的动态代理,通过注解和反射,Spring能够自动管理对象的创建和依赖注入,而MyB... 目录一、控制反转 IoC二、依赖倒置 DI1. 详细概念2. Spring 中 DI 的实现原理三、

k8s部署MongDB全过程

《k8s部署MongDB全过程》文章介绍了如何在Kubernetes集群中部署MongoDB,包括环境准备、创建Secret、创建服务和Deployment,并通过Robo3T工具测试连接... 目录一、环境准备1.1 环境说明1.2 创建 namespace1.3 创建mongdb账号/密码二、创建Sec

Java中的Opencv简介与开发环境部署方法

《Java中的Opencv简介与开发环境部署方法》OpenCV是一个开源的计算机视觉和图像处理库,提供了丰富的图像处理算法和工具,它支持多种图像处理和计算机视觉算法,可以用于物体识别与跟踪、图像分割与... 目录1.Opencv简介Opencv的应用2.Java使用OpenCV进行图像操作opencv安装j

将Python应用部署到生产环境的小技巧分享

《将Python应用部署到生产环境的小技巧分享》文章主要讲述了在将Python应用程序部署到生产环境之前,需要进行的准备工作和最佳实践,包括心态调整、代码审查、测试覆盖率提升、配置文件优化、日志记录完... 目录部署前夜:从开发到生产的心理准备与检查清单环境搭建:打造稳固的应用运行平台自动化流水线:让部署像

Python项目打包部署到服务器的实现

《Python项目打包部署到服务器的实现》本文主要介绍了PyCharm和Ubuntu服务器部署Python项目,包括打包、上传、安装和设置自启动服务的步骤,具有一定的参考价值,感兴趣的可以了解一下... 目录一、准备工作二、项目打包三、部署到服务器四、设置服务自启动一、准备工作开发环境:本文以PyChar

shell脚本快速检查192.168.1网段ip是否在用的方法

《shell脚本快速检查192.168.1网段ip是否在用的方法》该Shell脚本通过并发ping命令检查192.168.1网段中哪些IP地址正在使用,脚本定义了网络段、超时时间和并行扫描数量,并使用... 目录脚本:检查 192.168.1 网段 IP 是否在用脚本说明使用方法示例输出优化建议总结检查 1

centos7基于keepalived+nginx部署k8s1.26.0高可用集群

《centos7基于keepalived+nginx部署k8s1.26.0高可用集群》Kubernetes是一个开源的容器编排平台,用于自动化地部署、扩展和管理容器化应用程序,在生产环境中,为了确保集... 目录一、初始化(所有节点都执行)二、安装containerd(所有节点都执行)三、安装docker-

在Ubuntu上部署SpringBoot应用的操作步骤

《在Ubuntu上部署SpringBoot应用的操作步骤》随着云计算和容器化技术的普及,Linux服务器已成为部署Web应用程序的主流平台之一,Java作为一种跨平台的编程语言,具有广泛的应用场景,本... 目录一、部署准备二、安装 Java 环境1. 安装 JDK2. 验证 Java 安装三、安装 mys

如何在一台服务器上使用docker运行kafka集群

《如何在一台服务器上使用docker运行kafka集群》文章详细介绍了如何在一台服务器上使用Docker运行Kafka集群,包括拉取镜像、创建网络、启动Kafka容器、检查运行状态、编写启动和关闭脚本... 目录1.拉取镜像2.创建集群之间通信的网络3.将zookeeper加入到网络中4.启动kafka集群