《Kubernetes部署篇:Ubuntu20.04基于containerd二进制部署K8S 1.24.12集群(一主多从)》

news2024/11/26 21:42:19

一、架构图

如下图所示:

如下图所示:


二、环境信息

1、部署规划

主机名IP地址操作系统内核版本软件说明
etcd01192.168.1.62Ubuntu 20.04.5 LTS5.15.0-69-genericetcd
etcd02192.168.1.63Ubuntu 20.04.5 LTS5.15.0-69-genericetcd
etcd03192.168.1.64Ubuntu 20.04.5 LTS5.15.0-69-genericetcd
k8s-master-65192.168.1.65Ubuntu 20.04.5 LTS5.15.0-69-generickube-apiserver、kube-controller-manager、kube-scheduler、kubelet、kube-proxy
k8s-worker-66192.168.1.66Ubuntu 20.04.5 LTS5.15.0-69-generickubelet、kube-proxy

2、软件信息


三、初始化环境


四、创建CA证书和私钥

4.1、安装cfssl工具集

#1、下载文件
root@k8s-master-65:/opt# cd /opt/ssl/
root@k8s-master-65:/opt/ssl# wget https://github.com/cloudflare/cfssl/releases/download/v1.6.3/cfssl_1.6.3_linux_amd64
root@k8s-master-65:/opt/ssl# wget https://github.com/cloudflare/cfssl/releases/download/v1.6.3/cfssljson_1.6.3_linux_amd64
root@k8s-master-65:/opt/ssl# wget https://github.com/cloudflare/cfssl/releases/download/v1.6.3/cfssl-certinfo_1.6.3_linux_amd64

#2、复制文件
root@k8s-master-65:/opt/ssl# cp cfssl_1.6.3_linux_amd64  /usr/local/bin/cfssl
root@k8s-master-65:/opt/ssl# cp cfssl-certinfo_1.6.3_linux_amd64  /usr/local/bin/cfssl-certinfo
root@k8s-master-65:/opt/ssl# cp cfssljson_1.6.3_linux_amd64 /usr/local/bin/cfssljson

#3、添加文件权限
root@k8s-master-65:/opt/ssl# chmod +x /usr/local/bin/cfssl
root@k8s-master-65:/opt/ssl# chmod +x /usr/local/bin/cfssl-certinfo 
root@k8s-master-65:/opt/ssl# chmod +x /usr/local/bin/cfssljson 

4.2、准备CA配置文件和签名请求

4.2.1、创建配置文件

root@k8s-master-65:/opt/ssl# mkdir ca && cd /opt/ssl/ca
root@k8s-master-65:/opt/ssl/ca# vim ca-config.json
{
  "signing": {
    "default": {
      "expiry": "876000h"
    },
    "profiles": {
      "kubernetes": {
        "usages": [
            "signing",
            "key encipherment",
            "server auth",
            "client auth"
        ],
        "expiry": "876000h"
      },
      "kcfg": {
        "usages": [
            "signing",
            "key encipherment",
            "client auth"
        ],
        "expiry": "876000h"
      }
    }
  }
}

4.2.2、创建证书签名请求文件

root@k8s-master-65:/opt/ssl/ca# vim ca-csr.json
{
  "CN": "kubernetes-ca",
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "HangZhou",
      "L": "XS",
      "O": "k8s",
      "OU": "System"
    }
  ],
  "ca": {
    "expiry": "876000h"
  }
}

4.1、生成CA证书和私钥

root@k8s-master-65:/opt/ssl/ca# cfssl gencert -initca ca-csr.json | cfssljson -bare ca

如下图所示:
在这里插入图片描述


五、部署etcd集群

etcd是基于Raft的分布式KV存储系统,由CoreOS开发,常用于服务发现、共享配置以及并发控制(如 leader 选举、分布式锁等)。kubernetes使用etcd集群持久化存储所有API对象、运行数据。

etcd集群节点名称和IP如下: etcd01:192.168.1.62 etcd02:192.168.6.63 etcd03:192.168.1.64


5.1、创建etcd证书和私钥

5.1.1、创建证书签名请求

root@k8s-master-65:/opt/ssl# mkdir etcd && cd /opt/ssl/etcd
root@k8s-master-65:/opt/ssl/etcd# vim etcd-csr.json
{
  "CN": "etcd",
  "hosts": [
    "192.168.1.62",
    "192.168.1.63",
    "192.168.1.64",	
    "127.0.0.1"
  ],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "HangZhou",
      "L": "XS",
      "O": "k8s",
      "OU": "System"
    }
  ]
}

注意:这里的IP地址一定要根据自己的实际etcd集群ip填写;不然有可能会出现error “remote error: tls: bad certificate”, ServerName ""的错误。


5.1.2、生成证书和私钥

root@k8s-master-65:/opt/ssl/etcd# cfssl gencert -ca=/opt/ssl/ca/ca.pem  -ca-key=/opt/ssl/ca/ca-key.pem \
 -config=/opt/ssl/ca/ca-config.json  -profile=kubernetes etcd-csr.json | cfssljson -bare etcd	

如下图所示:
在这里插入图片描述


5.1.3、分发证书和私钥至各etcd节点

1、分别在etcd节点创建证书存放目录

#1、在节点etcd01上创建ca证书目录和etcd证书目录
root@etcd01:~# mkdir /etc/kubernetes/ssl -p
root@etcd01:~# mkdir /etc/kubernetes/ssl/etcd -p

#2、在节点etcd02上创建ca证书目录和etcd证书目录
root@etcd02:~# mkdir /etc/kubernetes/ssl -p
root@etcd02:~# mkdir /etc/kubernetes/ssl/etcd -p

#3、在节点etcd03上创建ca证书目录和etcd证书目录
root@etcd03:~# mkdir /etc/kubernetes/ssl -p
root@etcd03:~# mkdir /etc/kubernetes/ssl/etcd -p

2、将ca证书分别拷贝到各etcd节点

root@k8s-master-65:/opt/ssl# scp ca/ca.pem root@192.168.1.62:/etc/kubernetes/ssl
root@k8s-master-65:/opt/ssl# scp ca/ca.pem root@192.168.1.63:/etc/kubernetes/ssl
root@k8s-master-65:/opt/ssl# scp ca/ca.pem root@192.168.1.64:/etc/kubernetes/ssl

3、将etcd证书分别拷贝到各etcd节点

root@k8s-master-65:/opt/ssl# scp etcd/{etcd.pem,etcd-key.pem} root@192.168.1.62:/etc/kubernetes/ssl/etcd
root@k8s-master-65:/opt/ssl# scp etcd/{etcd.pem,etcd-key.pem} root@192.168.1.63:/etc/kubernetes/ssl/etcd
root@k8s-master-65:/opt/ssl# scp etcd/{etcd.pem,etcd-key.pem} root@192.168.1.64:/etc/kubernetes/ssl/etcd

5.2、安装etcd集群

5.2.1、下载etcd二进制文件

#1、etcd01主机上下载etcd二进制文件
root@etcd01:~# wget https://github.com/etcd-io/etcd/releases/download/v3.5.6/etcd-v3.5.6-linux-amd64.tar.gz
root@etcd01:~# tar axf etcd-v3.5.6-linux-amd64.tar.gz 
root@etcd01:~# mv etcd-v3.5.6-linux-amd64/etcd* /usr/bin

#2、etcd02主机上下载etcd二进制文件
root@etcd02:~# wget https://github.com/etcd-io/etcd/releases/download/v3.5.6/etcd-v3.5.6-linux-amd64.tar.gz
root@etcd02:~# tar axf etcd-v3.5.6-linux-amd64.tar.gz 
root@etcd02:~# mv etcd-v3.5.6-linux-amd64/etcd* /usr/bin

#3、etcd03主机上下载etcd二进制文件
root@etcd03:~# wget https://github.com/etcd-io/etcd/releases/download/v3.5.6/etcd-v3.5.6-linux-amd64.tar.gz
root@etcd03:~# tar axf etcd-v3.5.6-linux-amd64.tar.gz 
root@etcd03:~# mv etcd-v3.5.6-linux-amd64/etcd* /usr/bin

5.2.2、创建etcd的systemd uni文件

1、etcd01主机创建etcd的systemd unit文件

root@etcd01:~# vim /etc/systemd/system/etcd.service 
[Unit]
Description=Etcd Server
After=network.target
After=network-online.target
Wants=network-online.target
Documentation=https://github.com/coreos

[Service]
Type=notify
WorkingDirectory=/var/lib/etcd
ExecStart=/usr/bin/etcd \
  --name=etcd01 \
  --cert-file=/etc/kubernetes/ssl/etcd/etcd.pem \
  --key-file=/etc/kubernetes/ssl/etcd/etcd-key.pem \
  --peer-cert-file=/etc/kubernetes/ssl/etcd/etcd.pem \
  --peer-key-file=/etc/kubernetes/ssl/etcd/etcd-key.pem \
  --trusted-ca-file=/etc/kubernetes/ssl/ca.pem \
  --peer-trusted-ca-file=/etc/kubernetes/ssl/ca.pem \
  --initial-advertise-peer-urls=https://192.168.1.62:2380 \
  --listen-peer-urls=https://192.168.1.62:2380 \
  --listen-client-urls=https://192.168.1.62:2379,http://127.0.0.1:2379 \
  --advertise-client-urls=https://192.168.1.62:2379 \
  --initial-cluster-token=etcd-cluster-0 \
  --initial-cluster="etcd01=https://192.168.1.62:2380,etcd02=https://192.168.1.63:2380,etcd03=https://192.168.1.64:2380" \
  --initial-cluster-state=new \
  --data-dir=/var/lib/etcd \
  --wal-dir="" \
  --snapshot-count=50000 \
  --auto-compaction-retention=1 \
  --auto-compaction-mode=periodic \
  --max-request-bytes=10485760 \
  --quota-backend-bytes=8589934592
Restart=always
RestartSec=15
LimitNOFILE=65536
OOMScoreAdjust=-999

[Install]
WantedBy=multi-user.target

2、etcd02主机创建etcd的systemd unit文件

root@etcd02:~# vim /etc/systemd/system/etcd.service
[Unit]
Description=Etcd Server
After=network.target
After=network-online.target
Wants=network-online.target
Documentation=https://github.com/coreos

[Service]
Type=notify
WorkingDirectory=/var/lib/etcd
ExecStart=/usr/bin/etcd \
  --name=etcd02 \
  --cert-file=/etc/kubernetes/ssl/etcd/etcd.pem \
  --key-file=/etc/kubernetes/ssl/etcd/etcd-key.pem \
  --peer-cert-file=/etc/kubernetes/ssl/etcd/etcd.pem \
  --peer-key-file=/etc/kubernetes/ssl/etcd/etcd-key.pem \
  --trusted-ca-file=/etc/kubernetes/ssl/ca.pem \
  --peer-trusted-ca-file=/etc/kubernetes/ssl/ca.pem \
  --initial-advertise-peer-urls=https://192.168.1.63:2380 \
  --listen-peer-urls=https://192.168.1.63:2380 \
  --listen-client-urls=https://192.168.1.63:2379,http://127.0.0.1:2379 \
  --advertise-client-urls=https://192.168.1.63:2379 \
  --initial-cluster-token=etcd-cluster-0 \
  --initial-cluster="etcd01=https://192.168.1.62:2380,etcd02=https://192.168.1.63:2380,etcd03=https://192.168.1.64:2380" \
  --initial-cluster-state=new \
  --data-dir=/var/lib/etcd \
  --wal-dir="" \
  --snapshot-count=50000 \
  --auto-compaction-retention=1 \
  --auto-compaction-mode=periodic \
  --max-request-bytes=10485760 \
  --quota-backend-bytes=8589934592
Restart=always
RestartSec=15
LimitNOFILE=65536
OOMScoreAdjust=-999

[Install]
WantedBy=multi-user.target

3、etcd03主机创建etcd的systemd unit文件

root@etcd03:~# vim /etc/systemd/system/etcd.service 
[Unit]
Description=Etcd Server
After=network.target
After=network-online.target
Wants=network-online.target
Documentation=https://github.com/coreos

[Service]
Type=notify
WorkingDirectory=/var/lib/etcd
ExecStart=/usr/bin/etcd \
  --name=etcd03 \
  --cert-file=/etc/kubernetes/ssl/etcd/etcd.pem \
  --key-file=/etc/kubernetes/ssl/etcd/etcd-key.pem \
  --peer-cert-file=/etc/kubernetes/ssl/etcd/etcd.pem \
  --peer-key-file=/etc/kubernetes/ssl/etcd/etcd-key.pem \
  --trusted-ca-file=/etc/kubernetes/ssl/ca.pem \
  --peer-trusted-ca-file=/etc/kubernetes/ssl/ca.pem \
  --initial-advertise-peer-urls=https://192.168.1.64:2380 \
  --listen-peer-urls=https://192.168.1.64:2380 \
  --listen-client-urls=https://192.168.1.64:2379,http://127.0.0.1:2379 \
  --advertise-client-urls=https://192.168.1.64:2379 \
  --initial-cluster-token=etcd-cluster-0 \
  --initial-cluster="etcd01=https://192.168.1.62:2380,etcd02=https://192.168.1.63:2380,etcd03=https://192.168.1.64:2380" \
  --initial-cluster-state=new \
  --data-dir=/var/lib/etcd \
  --wal-dir="" \
  --snapshot-count=50000 \
  --auto-compaction-retention=1 \
  --auto-compaction-mode=periodic \
  --max-request-bytes=10485760 \
  --quota-backend-bytes=8589934592
Restart=always
RestartSec=15
LimitNOFILE=65536
OOMScoreAdjust=-999

[Install]
WantedBy=multi-user.target

5.2.3、启动etcd服务

注意:必须创建etcd数据目录和工作目录,3.4.10+版本,需要将数据目录的权限设置为0700才可以正常启动。

root@etcd01:~# mkdir /var/lib/etcd && chmod 700 /var/lib/etcd
root@etcd01:~# systemctl daemon-reload && systemctl enable etcd && systemctl restart etcd

root@etcd02:~# mkdir /var/lib/etcd && chmod 700 /var/lib/etcd
root@etcd01:~# systemctl daemon-reload && systemctl enable etcd && systemctl restart etcd

root@etcd03:~# mkdir /var/lib/etcd && chmod 700 /var/lib/etcd
root@etcd01:~# systemctl daemon-reload && systemctl enable etcd && systemctl restart etcd

5.2.4、检查etcd集群状态

root@etcd01:~# export NODE_IPS="192.168.1.62 192.168.1.64 192.168.1.64"
root@etcd01:~# for n in ${NODE_IPS};do etcdctl --endpoints=https://${n}:2379 --cacert=/etc/kubernetes/ssl/ca.pem \
--cert=/etc/kubernetes/ssl/etcd/etcd.pem --key=/etc/kubernetes/ssl/etcd/etcd-key.pem endpoint health;done

如下图所示:
在这里插入图片描述


六、生成K8S相关证书

6.1、生成K8S相关证书


总结:整理不易,如果对你有帮助,可否点赞关注一下?

更多详细内容请参考:企业级K8s集群运维实战

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

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

相关文章

kettle链接mysql Public Key Retrieval is not allowed

kettle 报错信息页面: 出现 Public Key Retrieval 的场景可以概括为在禁用 SSL/TLS 协议传输切当前用户在服务器端没有登录缓存的情况下,客户端没有办法拿到服务器的公钥。具体的场景如下: 新建数据库用户,首次登录;数…

课程推荐 | 机器视觉与边缘计算应用

点击蓝字关注我们,让开发变得更有趣文案 | 李擎排版 | 李擎文案来源 | https://www.icourse163.org/course/FUDAN-1456632162OpenVINO™╱ 前言 ╱机器视觉是目前人工智能重要的应用领域,在很多领域都有丰富的成功应用案例。其中深度学习的目标检测算法是非常实用的…

ubuntu(20.04)-shell脚本(1)-基本概念

目录 1.概述 2.shell脚本调用形式 3.shell语法初识 3.1 定义以开头:#!/bin/bash 3.2 单个“#”号代表注释当前行 4.变量 4.1 只读变量 4.2 环境变量: env 4.3 预测变量: 4.4 变量扩展: 是否存在,字符串…

通过JMH框架 测试公平锁与非公平锁的性能(附测试代码和源码分析)

目录 先上测试代码: 上依赖: 输出结果:(注意不要debug运行,直接运行代码,否则报错) 源码-公平锁的 lock 方法: 源码-非公平锁的lock方法: 总结 非公平锁和公平锁的两处不同: …

docker入门之一:docker基础概念与安装

1. Docker简单介绍 1.1. 什么是docker?1.2. Docker和传统虚拟机1.3. 为什么使用docker1.4. docker架构 2. Docker安装 2.1. docker版本命名2.2. docker安装2.3. docker卸载2.4. docker镜像加速器 1. Docker简单介绍 1.1. 什么是docker? google go语言…

24-Tomcat

目录 1.Tomcat是什么? 2.版本号 3.下载 4.目录介绍 4.1.bin目录 4.2.conf目录 4.3.logs目录 4.4.webapps目录 5.启动服务器 PS:解决Tomcat乱码问题 PS:Tomcat点击启动,控制台一闪而过,啥也没有解决方案 PS…

【花雕学AI】4月5日,ChatGPT中国财经背景分析:昨天沪指重返3300点,这说明了什么?

在这里插入图片描述 附录: 一、ChatGPT是一个可以和你聊天的人工智能程序,它可以用文字回答你的问题,也可以根据你的提示写出文章、歌词、代码等内容。ChatGPT是由一个叫OpenAI的机构开发的,它使用了一种叫做GPT的技术&…

TCP协议的相关特性(续)

TCP协议的相关特性🔎滑动窗口🔎流量控制🔎拥塞控制🔎延时应答🔎捎带应答🔎面向字节流(粘包问题)🔎异常情况🔎总结关于 确认应答 超时重传, 连接管理 请参考: 点击这里 &#x1f50e…

IT知识百科:什么是基站?

一、基站介绍 基站(Base Station),也称为基站站点或基站设备,是无线通信网络中的关键设备之一。基站用于与移动设备(如手机、无线网卡等)进行通信和数据传输,实现无线通信覆盖。 二、基站的功…

基于Python机器学习、深度学习技术提升气象、海洋、水文领域实践应用

Python是功能强大、免费、开源,实现面向对象的编程语言,能够在不同操作系统和平台使用,简洁的语法和解释性语言使其成为理想的脚本语言。除了标准库,还有丰富的第三方库,Python在数据处理、科学计算、数学建模、数据挖…

Web服务器压力测试

Web服务器压力测试 使用WebBench去进行网站的压力测试 1、去github下载项目源码webbench 2、download到本地 3、将压缩包上传到虚拟机上 4、解压,使用命令:unzip 压缩包名 5、 cd WebBench-mask6、构建项目 makemake install7、上述动作完成后&…

【Vue3】如何用Vue CLI 创建一个Vue3的初始化项目

第一步、安装Vue Cli npm install -g vue/cli 安装成功后,就可以在命令行工具中,使用vue命令。 检测是否安装成功,可以用 vue -V 出现版本号,代表安装成功。 第二步、创建项目 为了方便管理项目,我先在 github 创建了…

队列实现图书信息管理(C语言)

文章目录Queue.hmain.cQueue.c用队列实现一个图书信息管理,这里放一下有哪些文件。(ps:我之前写的是学生信息管理,但是有人说我们的作业是写图书,就该了下内容,没有改文件名)队列是用链表实现的…

***大论文中插入Visio不失真方法:word插入viso图片方法

***大论文中插入Visio不失真方法:word插入viso图片方法1、可以直接导出emf2、如果利用emf导致字符间距过大,可以选择下面方式1、可以直接导出emf 导出emf方法: 打开visio --> 另存为 --> 选择emf格式文件 打开word --> 插入图片&a…

6 计时器(三)

6.4 输出比较演示** 演示1:PWM驱动呼吸灯** 函数解释: 输出比较单元(掌握) void TIM_OC1Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct); void TIM_OC2Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCIni…

对Redis 的数据结构的更深刻理解

文章目录简单动态字符串SDS与C字符串的区别链表字典哈希算法 —— 添加新键值对的过程rehashrehash一般过程渐进式rehash渐进式rehash的详细步骤跳跃表实现整数集合intset升级步骤升级好处降级压缩列表 ziplistziplistnode连锁更新对象字符串对象列表对象哈希对象编码转换集合对…

RK356X 解除UVC摄像头预览分辨率1080P限制

平台 RK3566 Android 11 概述 UVC: USB video class(又称为USB video device class or UVC)就是USB device class视频产品在不需要安装任何的驱动程序下即插即用,包括摄像头、数字摄影机、模拟视频转换器、电视卡及静态视频相机…

详解C++中的命名空间(namespace)

个人主页:平行线也会相交 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 平行线也会相交 原创 收录于专栏【C之路】 目录C关键字(C98)命名冲突命名空间命名空间的定义局部域和全局域的关系命名空间域小结命名空间中可以定义哪些内容嵌套命名空间…

音视频开发常用分析工具介绍

综述 工欲善其事,必先利其器;兵马未到,粮草先行。 在音视频开发过程中,利用工具可以更方便、更直观、更快捷的分析音视频的数据,便于开发过程中分析、调试和解决问题。 现总结一些音视频开发过程中常用的分析工具。…

Android library native 代码不能调试解决方法汇总

android native开发会碰到native代码无法调试问题,而app主工程中的native代码是可以调试的。如果项目中存在多个module,那么在application模块中依赖library模块,并且library模块中有native代码的时候,当debug library模块中的这些…