kubernetes集群编排——k8s高可用集群

news2025/1/12 0:51:21
实验环境

主机名

IP

角色

k8s1

192.168.92.11

harbor

k8s2

192.168.92.12

control-plane

k8s3

192.168.92.13

control-plane

k8s4

192.168.92.14

control-plane

k8s5

192.168.92.15

haproxy,pacemaker

k8s6

192.168.92.16

haproxy,pacemaker

k8s7

192.168.92.17

worker node

haproxy负载均衡

配置节点解析,所有节点解析保持一致

[root@k8s5 ~]# cat /etc/hosts

[root@k8s5 ~]# yum install -y haproxy net-tools
[root@k8s5 ~]# cd /etc/haproxy/
[root@k8s5 haproxy]# vim haproxy.cfg
#---------------------------------------------------------------------
# Example configuration for a possible web application.  See the
# full configuration options online.
#
#   http://haproxy.1wt.eu/download/1.4/doc/configuration.txt
#
#---------------------------------------------------------------------

#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
    # to have these messages end up in /var/log/haproxy.log you will
    # need to:
    #
    # 1) configure syslog to accept network log events.  This is done
    #    by adding the '-r' option to the SYSLOGD_OPTIONS in
    #    /etc/sysconfig/syslog
    #
    # 2) configure local2 events to go to the /var/log/haproxy.log
    #   file. A line like the following can be added to
    #   /etc/sysconfig/syslog
    #
    #    local2.*                       /var/log/haproxy.log
    #
    log         127.0.0.1 local2

    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon

    # turn on stats unix socket
    stats socket /var/lib/haproxy/stats

#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults
    mode                    http
    log                     global
    #option                  httplog
    option                  dontlognull
    option http-server-close
    #option forwardfor       except 127.0.0.0/8
    option                  redispatch
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 3000
listen status *:80
        stats uri /status
        stats auth admin:westos

#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------
frontend  main *:6443
    mode tcp
    default_backend             k8s


#---------------------------------------------------------------------
# round robin balancing between the various backends
#---------------------------------------------------------------------
backend k8s
    mode tcp
    balance     roundrobin
    server  app1 192.168.92.12:6443 check
    server  app2 192.168.92.13:6443 check
    server  app3 192.168.92.14:6443 check

#注意:需要修改为自己的k8s control-plane地址

[root@k8s5 haproxy]# systemctl  start haproxy

[root@k8s5 haproxy]# netstat -antlp|grep :6443

访问监控页面:http://192.168.92.15/status

测试成功后关闭服务,不要设置自启动

[root@k8s5 haproxy]# systemctl  stop haproxy

设置免密

[root@k8s5 haproxy]# ssh-keygen

[root@k8s5 haproxy]# ssh-copy-id k8s6

k8s6节点安装haproxy软件

[root@k8s6 ~]# yum install -y haproxy

从k8s5拷贝配置文件

[root@k8s5 haproxy]# scp haproxy.cfg  k8s6:/etc/haproxy/

测试服务

访问监控页面:http://192.168.92.16/status

测试成功后关闭服务,不要设置自启动

[root@k8s6 haproxy]# systemctl  stop haproxy

pacemaker高可用

[root@k8s5 ~]# cd /etc/yum.repos.d/
[root@k8s5 yum.repos.d]# vim hjl.repo
[dvd]
name=dvd
baseurl=file:///media
gpgcheck=0

[HighAvailability]
name=HighAvailability
baseurl=file:///media/addons/HighAvailability
gpgcheck=0

同步配置文件

[root@k8s5 yum.repos.d]# scp hjl.repo  k8s6:/etc/yum.repos.d/

安装软件

[root@k8s5 yum.repos.d]# yum install  -y pacemaker pcs psmisc policycoreutils-python

[root@k8s6 ~]# yum install  -y pacemaker pcs psmisc policycoreutils-python

启动pcsd服务

[root@k8s5 ~]# systemctl enable --now pcsd.service

[root@k8s5 ~]# ssh k8s6 systemctl enable --now pcsd.service

设置用户密码

[root@k8s5 ~]# echo westos | passwd --stdin hacluster

[root@k8s5 ~]# ssh k8s6 'echo westos | passwd --stdin hacluster'

节点认证

[root@k8s5 ~]# pcs cluster auth k8s5 k8s6

创建集群

[root@k8s5 ~]# pcs cluster setup --name mycluster k8s5 k8s6

启动集群

[root@k8s5 ~]# pcs cluster start --all

集群自启动

[root@k8s5 ~]# pcs cluster enable --all

禁用stonith

[root@k8s5 ~]# pcs property set stonith-enabled=false
[root@k8s5 ~]# pcs status

添加集群资源

[root@k8s5 ~]# pcs resource create vip ocf:heartbeat:IPaddr2 ip=192.168.56.200 op monitor interval=30s

[root@k8s5 ~]# pcs resource create haproxy systemd:haproxy op  monitor interval=60s

[root@k8s5 ~]# pcs resource group add hagroup vip haproxy

测试

[root@k8s5 ~]# pcs node standby

资源全部迁移到k8s6

[root@k8s5 ~]# pcs status

恢复

[root@k8s5 ~]# pcs node  unstandby

[root@k8s5 ~]# pcs status

部署control-plane

加载内核模块(在所有集群节点执行)

[root@k8s2 ~]# vim /etc/modules-load.d/k8s.conf
overlay
br_netfilter
[root@k8s2 ~]# modprobe overlay

[root@k8s2 ~]# modprobe br_netfilter

[root@k8s3 ~]# modprobe overlay

[root@k8s3 ~]# modprobe br_netfilter

[root@k8s4 ~]# modprobe overlay

[root@k8s4 ~]# modprobe br_netfilter
[root@k8s2 ~]# vim /etc/sysctl.d/docker.conf
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
[root@k8s2 ~]# sysctl --system

确认软件版本

[root@k8s2 ~]# rpm -q kubeadm kubelet kubectl

生成初始化配置文件

[root@k8s2 ~]# kubeadm config print init-defaults > kubeadm-init.yaml

修改配置

[root@k8s2 ~]# vim kubeadm-init.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.92.12
  bindPort: 6443
nodeRegistration:
  criSocket: unix:///var/run/containerd/containerd.sock
  imagePullPolicy: IfNotPresent
  name: k8s2
  taints: null
---
apiServer:
  timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta3
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controlPlaneEndpoint: "192.168.92.200:6443"
controllerManager: {}
dns: {}
etcd:
  local:
    dataDir: /var/lib/etcd
imageRepository: reg.westos.org/k8s
kind: ClusterConfiguration
kubernetesVersion: 1.24.17
networking:
  dnsDomain: cluster.local
  serviceSubnet: 10.96.0.0/12
  podSubnet: 10.244.0.0/16
scheduler: {}
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs

初始化集群

[root@k8s2 ~]# kubeadm init   --config kubeadm-init.yaml --upload-certs

部署网络组件

[root@k8s2 calico]# kubectl apply -f calico.yaml
[root@k8s2 ~]# kubectl get pod -A

添加其它control-plane节点

[root@k8s3 ~]# kubeadm join 192.168.92.200:6443 --token abcdef.0123456789abcdef         --discovery-token-ca-cert-hash sha256:a1f977a7de194528e84da253c3cf6c89aac1d7e78cfd5ca733ebff9e5c5c3330         --control-plane --certificate-key 35c53e03e75b37ab5ac1a6401589a6bb8d8cff5e4e8f23a03ffd1dcf2256aa9a


[root@k8s4 ~]# kubeadm join 192.168.92.200:6443 --token abcdef.0123456789abcdef         --discovery-token-ca-cert-hash sha256:a1f977a7de194528e84da253c3cf6c89aac1d7e78cfd5ca733ebff9e5c5c3330         --control-plane --certificate-key 35c53e03e75b37ab5ac1a6401589a6bb8d8cff5e4e8f23a03ffd1dcf2256aa9a
[root@k8s2 ~]# kubectl get nodes

部署worker node

新添加的节点需要初始化配置

  1. 禁用selinux、firewalld、swap分区
  2. 部署containerd
  3. 安装kubelet、kubeadm、kubectl
  4. 配置内核模块

添加解析

[root@k8s7 ~]# cat /etc/hosts

禁用swap
 

[root@k8s7 ~]# swapoff -a

[root@k8s7 ~]# vim /etc/fstab

安装containerd、kubelet、kubeadm、kubectl

从其它节点拷贝repo文件

[root@k8s4 yum.repos.d]# scp docker.repo k8s.repo k8s7:/etc/yum.repos.d/

安装软件

[root@k8s7 ~]# yum install -y containerd.io kubeadm-1.24.17-0 kubelet-1.24.17-0 kubectl-1.24.17-0

自启动服务

[root@k8s7 ~]# systemctl enable --now containerd

[root@k8s7 ~]# systemctl enable --now kubelet

拷贝containerd的配置文件

[root@k8s4 yum.repos.d]# cd /etc/containerd/
[root@k8s4 containerd]# ls

[root@k8s4 containerd]# scp -r * k8s7:/etc/containerd/

重启服务

[root@k8s7 containerd]# systemctl  restart containerd
[root@k8s7 containerd]# crictl config runtime-endpoint unix:///run/containerd/containerd.sock
[root@k8s7 containerd]# crictl pull myapp:v1

配置内核模块

[root@k8s4 containerd]# cd /etc/modules-load.d/
[root@k8s4 modules-load.d]# scp k8s.conf k8s7:/etc/modules-load.d/
[root@k8s4 modules-load.d]# cd /etc/sysctl.d/
[root@k8s4 sysctl.d]# scp docker.conf k8s7:/etc/sysctl.d/

[root@k8s7 ~]# modprobe overlay
[root@k8s7 ~]# modprobe br_netfilter
[root@k8s7 ~]# sysctl --system

加入集群

[root@k8s7 ~]# kubeadm join 192.168.92.200:6443 --token abcdef.0123456789abcdef         --discovery-token-ca-cert-hash sha256:a1f977a7de194528e84da253c3cf6c89aac1d7e78cfd5ca733ebff9e5c5c3330

测试

[root@k8s2 ~]# kubectl get nodes

[root@k8s2 ~]# kubectl create deployment myapp --image myapp:v1

[root@k8s2 ~]# kubectl get pod -o wide

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1220634.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

03-瑞吉外卖关于菜品/套餐分类表的增删改查

新增菜品/套餐分类 页面原型 当我们在后台系统中添加菜品/套餐时,需要选择一个菜品/套餐分类,在移动端也会按照菜品分类和套餐分类来展示对应的菜品和套餐 第一步: 用户点击确定按钮执行submitForm函数发送Ajax请求,将新增菜品/套餐表单中输入的数据以json形式提交给服务端,…

(1)(1.16) Maxbotix I2C声纳

文章目录 前言 1 连接到Pixhawk 2 通过Mission Planner进行设置 3 测试传感器 4 参数说明 前言 Maxbotix I2C EZ4 声纳(又称 I2CXL-MaxSonar-EZ4 或 MB1242)是一种相对便宜的短距离(最多 7m)测距仪,主要设计用于…

为什么鸿蒙调用弹窗组件(CommonDialog )却不展示或闪退?

鸿蒙OS开发问题 1.效果展示2.问题代码3.问题分析4.完整代码 1.效果展示 1.为什么调用弹窗不展示会闪退? 2.问题代码 1.前端代码: <?xml version"1.0" encoding"utf-8"?> <DirectionalLayoutxmlns:ohos"http://schemas.huawei.com/res/…

提前占领高地!2024年值得期待的UI设计原型图软件推荐

UI设计原型图软件对于产品经理、设计师来说是效率神器。一款专业的UI设计原型图软件能够帮助产品经理、设计师高效且快速地创建精美且实用的UI用户界面&#xff0c;从而提升UI用户界面的产品价值。本篇文章将推荐10款2024年好用的UI设计原型图软件&#xff0c;以帮助你更好地选…

DS二叉树的存储

前言 我们上一期已经介绍了树相关的基础知识&#xff0c;了解了树相关的概念和结构、二叉树的概念和结构以及性质、也介绍了他的存储方式&#xff01;本期我们来根据上期介绍的对二叉树的顺序存储和链式存储分别进行实现&#xff01; 本期内容介绍 二叉树的顺序结构 堆的概念…

性能压力测试的优势与重要性

性能压力测试是软件开发过程中至关重要的一环&#xff0c;它通过模拟系统在极限条件下的运行&#xff0c;以评估系统在正常和异常负载下的表现。这种测试为确保软件系统的可靠性、稳定性和可伸缩性提供了关键信息。下面将探讨性能压力测试的优势以及为什么在软件开发中它具有不…

GMS CTS测试命令汇总

目录 跑CTS之前的准备 样机环境要求 跑各模块版本要求 CTS 简介 复测上轮的失败项 多台设备测试 单跑指定模块和测试用例 GTS VTS STS GSI 获取fingerprint 跑CTS之前的准备 样机环境要求 1、打开stay wake&#xff08;保持屏幕常亮&#xff09;、OEM unlocking、…

Java-Review

题型分值总分分布简答 5 ∗ 8 ′ 5*8 5∗8′ 4 0 ′ 40 40′面向对象、异常处理、多线程、输入输出处理程序分析和补全 3 ∗ 1 0 ′ 3*10 3∗10′ 3 0 ′ 30 30′异常处理、Collection、图形化界面、输入输出处理编程 2 ∗ 1 5 ′ 2*15 2∗15′ 3 0 ′ 30 30′Collections、多线…

腾讯云服务器怎么样好用吗?腾讯云服务器好用吗?

大家好&#xff01;今天我们要来聊聊腾讯云服务器怎么样&#xff0c;好用吗&#xff1f;对于这个问题&#xff0c;我的答案是非常肯定的——好用&#xff01; 那么&#xff0c;腾讯云服务器究竟好在哪里呢&#xff1f; 首先&#xff0c;它的功能非常强大。它不仅能够提供云存…

2023.11.17-hive调优的常见方式

目录 0.设置hive参数 1.数据压缩 2.hive数据存储格式 3.fetch抓取策略 4.本地模式 5.join优化操作 6.SQL优化(列裁剪,分区裁剪,map端聚合,count(distinct),笛卡尔积) 6.1 列裁剪: 6.2 分区裁剪: 6.3 map端聚合(group by): 6.4 count(distinct): 6.5 笛卡尔积: 7…

2023年中国涂料树脂需求量、市场规模及行业竞争现状分析[图]

涂料用树脂是涂料的主要原材料&#xff0c;是涂料的主要成膜物&#xff0c;且了为涂料成品提供耐醇、耐磨、耐高温、耐高湿、减少涂料在涂装完成后的损耗、保持涂装后外观以及性状的稳定性等功能。 根据生产产品的性状不同&#xff0c;其下游产品&#xff0c;即涂料成品广泛应用…

云网络流量分析工具的关键优势有哪些?

在当今数字化的时代&#xff0c;企业依赖云计算和网络服务以实现高效运营。随着云网络的复杂性不断增加&#xff0c;对网络流量的分析变得至关重要。云网络流量分析工具应运而生&#xff0c;为管理员提供了深入洞察、实时监控的能力。本文将探讨此工具的关键优势以及它们在现代…

君正X2100 读取CHIP_ID

每个处理器会有一个唯一的ID&#xff0c;这个ID可用做产品序列号&#xff0c;或其它。 X21000的CHIP_ID存放于芯片内部的efuse中&#xff0c;efuse是一次性可可编程存储器&#xff0c;初始值为全0&#xff0c;只能将0改为1&#xff0c;不能将1改为0。芯片出厂前会被写入一些信…

修改YOLOv5的模型结构第二弹

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制&#x1f680; 文章来源&#xff1a;K同学的学习圈子 上节说到了通过修改YOLOv5的common.py来修改模型的结构&#xff0c;修改的是模块的内…

2023年【陕西省安全员B证】考试题库及陕西省安全员B证找解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 陕西省安全员B证考试题库是安全生产模拟考试一点通生成的&#xff0c;陕西省安全员B证证模拟考试题库是根据陕西省安全员B证最新版教材汇编出陕西省安全员B证仿真模拟考试。2023年【陕西省安全员B证】考试题库及陕西省…

分布式事务seata的使用

分布式事务介绍 在微服务架构中&#xff0c;完成某一个业务功能可能需要横跨多个服务&#xff0c;操作多个数据库。这就涉及到到了分布式事务&#xff0c;需要操作的资源位于多个资源服务器上&#xff0c;而应用需要保证对于多个资源服务器的数据操作&#xff0c;要么全部成功&…

深度学习_14_单层|多层感知机及代码实现

单层感知机&#xff1a; 功能&#xff1a; 能完成二分类问题 问题&#xff1a; 模型训练采用X*W b训练出模型&#xff0c;对数据只进行了一层处理&#xff0c;也就是说训练出来的模型仅是个线性模型&#xff0c;它无法解决XOR问题&#xff0c;所以模型在训练效果上&#xf…

cookie机制 + java 案例

目录 为什么会有cookie?? cookie从哪里来的&#xff1f;&#xff1f; cookie到哪里去&#xff1f;&#xff1f; cookie有啥用&#xff1f;&#xff1f; session HttpServletRequest类中的相关方法 简单的实现cookie登录功能 实现登录页面 实现servlet逻辑 实现生成主…

【Spring】依赖注入方式,DI的方式

这里写目录标题 1. setter注入在一个类中注入引用类型在一个类中注入简单类型 2. 构造器注入在一个类中注入引用类型在一个类中注入简单类型 3. 依赖注入方式选择4. 依赖自动装配按类型注入按名称注入 5. 集合注入 1. setter注入 在一个类中注入引用类型 回顾一下之前setter注…

Python基础:输入输出详解-输出字符串格式化

Python中的输入和输出是编程中非常重要的方面。 1. 输入输出简单介绍 1.1 输入方式 Python中的输入可以通过input()函数从键盘键入&#xff0c;也可以通过命令行参数或读取文件的方式获得数据来源。 1&#xff09;input()示例 基本的input()函数&#xff0c;会将用户在终端&…