Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >二进制部署一套高可用K8s集群-v1.24+(一)

二进制部署一套高可用K8s集群-v1.24+(一)

原创
作者头像
浅时光博客
修改于 2022-09-11 02:54:32
修改于 2022-09-11 02:54:32
2.4K0
举报
文章被收录于专栏:云原生K8s云原生K8s

一、系统初始化

  • 说明:本文档的角色规划和系统初始化流程跟下面链接中的文章规划一致,本文不在赘诉!

 二进制部署K8s系统初始化

提示:

  1. 本文档使用的K8s版本为1.24+ 2.本文档使用的容器运行时为 Containerd 3.本文档使用的网络插件为 Calico 4.本文档使用的系统为 CentOS 7.6,内核版本5.4+ 5.执行下面的操作之前,请确保K8s-master1节点机器与其它集群节点已经实现了主机名免密和IP免密登入
image.png
image.png

二、创建CA根证书和秘钥

1、安装cfssl工具集

项目地址: https://github.com/cloudflare/cfssl

代码语言:shell
AI代码解释
复制
[root@k8s-master1 ~]# cd /opt/k8s

[root@k8s-master1 k8s]# wget https://github.com/cloudflare/cfssl/releases/download/v1.6.1/cfssl_1.6.1_linux_amd64
[root@k8s-master1 k8s]# mv cfssl_1.6.1_linux_amd64 /opt/k8s/bin/cfssl

[root@k8s-master1 k8s]# wget https://github.com/cloudflare/cfssl/releases/download/v1.6.1/cfssljson_1.6.1_linux_amd64 
[root@k8s-master1 k8s]# mv cfssljson_1.6.1_linux_amd64 /opt/k8s/bin/cfssljson

[root@k8s-master1 k8s]# wget https://github.com/cloudflare/cfssl/releases/download/v1.6.1/cfssl-certinfo_1.6.1_linux_amd64 
[root@k8s-master1 k8s]# mv cfssl-certinfo_1.6.1_linux_amd64 /opt/k8s/bin/cfssl-certinfo

[root@k8s-master1 k8s]# chmod +x /opt/k8s/bin/*
[root@k8s-master1 k8s]# export PATH=/opt/k8s/bin:$PATH

[root@k8s-master1 k8s]# ls /opt/k8s/bin/

2、创建根证书(CA)

2.1:创建配置文件

代码语言:shell
AI代码解释
复制
[root@k8s-master1 ~]# cd /opt/k8s/work
[root@k8s-master1 work]# mkdir -p ca && cd ca
[root@k8s-master1 ca]# cat > ca-config.json <<EOF
{
  "signing": {
    "default": {
      "expiry": "87600h"
    },
    "profiles": {
      "kubernetes": {
        "usages": [
            "signing",
            "key encipherment",
            "server auth",
            "client auth"
        ],
        "expiry": "876000h"
      }
    }
  }
}
EOF

signing:表示该证书可用于签名其它证书(生成的 ca.pem 证书中 CA=TRUE);

server auth:表示 client 可以用该该证书对 server 提供的证书进行验证;

client auth:表示 server 可以用该该证书对 client 提供的证书进行验证;

"expiry": "876000h":证书有效期设置为 100 年;

2.2:创建证书签名请求文件

代码语言:shell
AI代码解释
复制
[root@k8s-master1 ca]# cat > ca-csr.json <<EOF
{
  "CN": "kubernetes-ca",
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "Beijing",
      "L": "Beijing",
      "O": "k8s",
      "OU": "dqz"
    }
  ],
  "ca": {
    "expiry": "876000h"
 }
}
EOF

2.3:生成CA证书和私钥

代码语言:shell
AI代码解释
复制
[root@k8s-master1 ca]# cfssl gencert -initca ca-csr.json | cfssljson -bare ca
 

[root@k8s-master1 ca]# ls ca*
ca-config.json  ca.csr  ca-csr.json  ca-key.pem  ca.pem
image.png
image.png

3、分发证书文件

将生成的 CA 证书、秘钥文件、配置文件拷贝到所有节点(master和worker节点)的 /etc/kubernetes/cert目录下

代码语言:shell
AI代码解释
复制
[root@k8s-master1 ca]# for node_ip in ${NODE_IPS[@]}
  do
    echo ">>> ${node_ip}"
    ssh root@${node_ip} "mkdir -p /etc/kubernetes/cert"
    scp ca*.pem ca-config.json root@${node_ip}:/etc/kubernetes/cert
  done
image.png
image.png
代码语言:shell
AI代码解释
复制
[root@k8s-master1 ca]# for node_ip in ${NODE_IPS[@]}
  do
    echo ">>> ${node_ip}"
    ssh root@${node_ip} "ls -lt /etc/kubernetes/cert"
  done

三、部署ETCD集群

  • etcd 是基于 Raft 的分布式 KV 存储系统,由 CoreOS 开发,常用于服务发现、共享配置以及并发控制(如 leader 选举、分布式锁等)。
  • kubernetes 使用 etcd 集群持久化存储所有 API 对象、运行数据。
  • etcd 集群节点名称和 IP 如下: k8s-master1:192.168.66.62 k8s-master2:192.168.66.63 k8s-master3:192.168.66.64

1、下载和分发 etcd 二进制文件

ETCD仓库地址: https://github.com/etcd-io/etcd/releases 如果网络原因,请在本地下载好安装包并上传至服务器

1.1:解压安装

代码语言:shell
AI代码解释
复制
[root@k8s-master1 ~]# cd /opt/k8s/work/
[root@k8s-master1 work]# mkdir etcd && cd etcd

#下面的下载链接为加速地址
[root@k8s-master1 etcd]# wget https://github.91chi.fun/https://github.com//etcd-io/etcd/releases/download/v3.6.0-alpha.0/etcd-v3.6.0-alpha.0-linux-amd64.tar.gz

#解压包至当前目录下
[root@k8s-master1 etcd]# tar -xf etcd-v3.6.0-alpha.0-linux-amd64.tar.gz

1.2:分发各ETCD节点

代码语言:shell
AI代码解释
复制
[root@k8s-master1 etcd]# for node_ip in ${ETCD_IPS[@]}
  do
    echo ">>> ${node_ip}"
    scp etcd-v3.6.0-alpha.0-linux-amd64/etcd* root@${node_ip}:/opt/k8s/bin
    ssh root@${node_ip} "chmod +x /opt/k8s/bin/*"
  done
image.png
image.png

2、创建 etcd 证书和私钥

2.1:创建证书签名请求

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

代码语言:shell
AI代码解释
复制
[root@k8s-master1 ~]# cd /opt/k8s/work/etcd
[root@k8s-master1 etcd]# mkdir -p cert && cd cert/
[root@k8s-master1 cert]# cat > etcd-csr.json <<EOF
{
  "CN": "etcd",
  "hosts": [
    "127.0.0.1",
    "192.168.66.62",
    "192.168.66.63",
    "192.168.66.64"
  ],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "Beijing",
      "L": "Beijing",
      "O": "k8s",
      "OU": "dqz"
    }
  ]
}
EOF

2.2:生成证书和私钥

代码语言:shell
AI代码解释
复制
[root@k8s-master1 cert]# cfssl gencert -ca=/opt/k8s/work/ca/ca.pem \
    -ca-key=/opt/k8s/work/ca/ca-key.pem \
    -config=/opt/k8s/work/ca/ca-config.json \
-profile=kubernetes etcd-csr.json | cfssljson -bare etcd
image.png
image.png

2.3:分发证书和私钥至各etcd节点

代码语言:shell
AI代码解释
复制
[root@k8s-master1 cert]# for node_ip in ${ETCD_IPS[@]}
  do
    echo ">>> ${node_ip}"
    ssh root@${node_ip} "mkdir -p /etc/etcd/cert"
    scp etcd*.pem root@${node_ip}:/etc/etcd/cert/
  done

3、创建 etcd 的 systemd unit 模板文件

代码语言:shell
AI代码解释
复制
[root@k8s-master1 ~]# mkdir /opt/k8s/work/service-template
[root@k8s-master1 ~]# cd /opt/k8s/work/service-template
[root@k8s-master1 service-template]# mkdir -p etcd && cd etcd
[root@k8s-master1 etcd]# cat > etcd.service.template <<EOF
[Unit]
Description=Etcd Server
After=network.target
After=network-online.target
Wants=network-online.target
Documentation=https://github.com/coreos

[Service]
Type=notify
WorkingDirectory=${ETCD_DATA_DIR}
ExecStart=/opt/k8s/bin/etcd \\
  --data-dir=${ETCD_DATA_DIR} \\
  --wal-dir=${ETCD_WAL_DIR} \\
  --name=##ETCD_NAME## \\
  --cert-file=/etc/etcd/cert/etcd.pem \\
  --key-file=/etc/etcd/cert/etcd-key.pem \\
  --trusted-ca-file=/etc/kubernetes/cert/ca.pem \\
  --peer-cert-file=/etc/etcd/cert/etcd.pem \\
  --peer-key-file=/etc/etcd/cert/etcd-key.pem \\
  --peer-trusted-ca-file=/etc/kubernetes/cert/ca.pem \\
  --peer-client-cert-auth \\
  --client-cert-auth \\
  --listen-peer-urls=https://##ETCD_IP##:2380 \\
  --initial-advertise-peer-urls=https://##ETCD_IP##:2380 \\
  --listen-client-urls=https://##ETCD_IP##:2379,http://127.0.0.1:2379 \\
  --advertise-client-urls=https://##ETCD_IP##:2379 \\
  --initial-cluster-token=etcd-cluster-0 \\
  --initial-cluster=${ETCD_NODES} \\
  --initial-cluster-state=new \\
  --auto-compaction-mode=periodic \\
  --auto-compaction-retention=1 \\
  --max-request-bytes=33554432 \\
  --quota-backend-bytes=6442450944 \\
  --heartbeat-interval=250 \\
  --election-timeout=2000
Restart=on-failure
RestartSec=5
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target
EOF

4、为各ETCD节点创建和分发 etcd systemd unit 文件

4.1:替换模板文件中的变量

代码语言:shell
AI代码解释
复制
[root@k8s-master1 etcd]# for (( i=0; i < 3; i++ ))
  do
    sed -e "s/##ETCD_NAME##/${ETCD_NAMES[i]}/" -e "s/##ETCD_IP##/${ETCD_IPS[i]}/" etcd.service.template > etcd-${ETCD_IPS[i]}.service 
  done

[root@k8s-master1 etcd]# ls *.service
etcd-192.168.66.62.service  etcd-192.168.66.63.service  etcd-192.168.66.64.service
image.png
image.png

4.2:分发生成的 systemd unit 文件

代码语言:shell
AI代码解释
复制
[root@k8s-master1 etcd]# for node_ip in ${ETCD_IPS[@]}
  do
    echo ">>> ${node_ip}"
    scp etcd-${node_ip}.service root@${node_ip}:/etc/systemd/system/etcd.service
  done
image.png
image.png

5、启动ETCD服务

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

etcd 进程首次启动时会等待其它节点的 etcd 加入集群,命令 systemctl start etcd 会卡住一段时间,为正常现象。 注意:有可能ETCD节点1启动失败,而另外2个节点启动成功,这是正常情况,请重启ETCD节点1即可

代码语言:shell
AI代码解释
复制
[root@k8s-master1 etcd]# for node_ip in ${ETCD_IPS[@]}
  do
    echo ">>> ${node_ip}"
    ssh root@${node_ip} "mkdir -p ${ETCD_DATA_DIR} ${ETCD_WAL_DIR} && chmod 0700 /data/k8s/etcd/data"
    ssh root@${node_ip} "systemctl daemon-reload && systemctl enable etcd && systemctl restart etcd"
  done
image.png
image.png
代码语言:shell
AI代码解释
复制
#手动在master1节点运行启动ETCD服务
[root@k8s-master1 etcd]# systemctl daemon-reload && systemctl enable etcd && systemctl restart etcd

6、检查启动结果

代码语言:shell
AI代码解释
复制
[root@k8s-master1 etcd]# for node_ip in ${ETCD_IPS[@]}
  do
    echo ">>> ${node_ip}"
    ssh root@${node_ip} "systemctl status etcd|grep Active"
  done
image.png
image.png

7、验证服务状态

代码语言:shell
AI代码解释
复制
[root@k8s-master1 etcd]# for node_ip in ${ETCD_IPS[@]}
  do
    echo ">>> ${node_ip}"
    /opt/k8s/bin/etcdctl \
    --endpoints=https://${node_ip}:2379 \
    --cacert=/etc/kubernetes/cert/ca.pem \
    --cert=/etc/etcd/cert/etcd.pem \
    --key=/etc/etcd/cert/etcd-key.pem endpoint health
  done
image.png
image.png

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Kubernetes 二进制部署(二)集群部署(多 Master 节点通过 Nginx 负载均衡)
0. 前言 紧接上一篇,本篇文章我们尝试学习多节点部署 kubernetes 集群 并通过 haproxy+keepalived 实现 Master 节点的负载均衡 1. 实验环境 实验环境主要为 5 台虚拟机,IP 地址分别为:192.168.1.65、192.168.1.66、192.168.1.67、192.168.1.68、192.168.1.69 1.1 节点分配 LB 节点: lb1:192.168.1.65 lb2:192.168.1.66 Master 节点: master1:192.
西凉风雷
2022/11/23
1.6K0
Kubernetes 二进制部署(二)集群部署(多 Master 节点通过 Nginx 负载均衡)
Kubernetes-V1.14.2 二进制编译安装(安装etcd篇)
修改另外两台机器的etcd.conf文件中的ETCD_NAME和监听IP,如下图所示,其中标蓝线的地方,ip都更换为当前机器的ip
运维搬砖
2019/07/23
1.7K0
Kubernetes-V1.14.2 二进制编译安装(安装etcd篇)
Kubernetes(k8s)1.14 离线版集群 - 部署高可用的Etcd(3.3.17版)集群并搭建Flannel网络
声明: 如果您有更好的技术与作者分享,或者商业合作; 请访问作者个人网站 http://www.esqabc.com/view/message.html 留言给作者。 如果该案例触犯您的专利,请在这里:http://www.esqabc.com/view/message.html 留言给作者说明原由 作者一经查实,马上删除。
Mr.Vv
2020/06/11
5890
Kubernetes(k8s)1.14 离线版集群 - 部署高可用的Etcd(3.3.17版)集群并搭建Flannel网络
Kubernetes全栈架构师(二进制高可用安装k8s集群部署篇)--学习笔记
k8s高可用架构解析,高可用Kubernetes集群规划,设置静态ip,请参考上一篇文章
郑子铭
2021/07/19
1.2K0
Kubernetes全栈架构师(二进制高可用安装k8s集群部署篇)--学习笔记
Kubernetes(k8s)1.14 离线版集群 - 创建CA证书、秘钥和部署kubectl工具
声明: 如果您有更好的技术与作者分享,或者商业合作; 请访问作者个人网站 http://www.esqabc.com/view/message.html 留言给作者。 如果该案例触犯您的专利,请在这里:http://www.esqabc.com/view/message.html 留言给作者说明原由 作者一经查实,马上删除
Mr.Vv
2020/06/11
7940
Kubernetes(k8s)1.14 离线版集群 - 创建CA证书、秘钥和部署kubectl工具
006.Kubernetes二进制部署ETCD
etcd 是基于 Raft 的分布式 key-value 存储系统,由 CoreOS 开发,常用于服务发现、共享配置以及并发控制(如 leader 选举、分布式锁等)。kubernetes 使用 etcd 存储所有运行数据。
木二
2019/11/18
4120
006.Kubernetes二进制部署ETCD
Kubernetes v1.18.2 二进制高可用部署
二进制包下载地址:https://github.com/etcd-io/etcd/releases/download/v3.4.7/etcd-v3.4.7-linux-amd64.tar.gz
YP小站
2020/06/04
1.7K0
Kubernetes v1.18.2 二进制高可用部署
004.Kubernetes二进制部署创建证书
config.json:可以定义多个profiles,分别指定不同的过期时间、使用场景等参数;后续在签名证书时使用某个profile;
木二
2019/11/15
4490
007.Kubernetes二进制部署Flannel
kubernetes 要求集群内各节点(包括 master 节点)能通过 Pod 网段互联互通。flannel 使用 vxlan 技术为各节点创建一个可以互通的 Pod 网络,使用的端口为 UDP 8472。
木二
2019/11/18
1K0
k8s1.13.0二进制部署-ETCD集群(一)
 Kubernetes集群中主要存在两种类型的节点:master、minion节点。
yuezhimi
2020/09/30
4930
k8s1.13.0二进制部署-ETCD集群(一)
人生苦短,我用k8s--------------单节点二进制部署
etcd是CoreOS团队于2013年6月发起的开源项目,基于go语言开发,目标是构建一个高可用的分布式键值(key-value)数据库。etcd内部采用raft协议作为一致性算法。
不吃小白菜
2020/10/09
8750
二进制安装Kubernetes(k8s) v1.23.4 ---(上)
https://github.com/cby-chen/Kubernetes 开源不易,帮忙点个star,谢谢了
小陈运维
2022/03/01
2.5K0
Kubernetes高可用集群二进制部署(二)ETCD集群部署
确保在当前目录有ca-key.pem、ca-config.json、etcd-csr.json文件
鱼找水需要时间
2023/08/03
4530
Kubernetes高可用集群二进制部署(二)ETCD集群部署
Kubernetes(k8s)1.14 离线版集群 - 部署master节点
声明: 如果您有更好的技术与作者分享,或者商业合作; 请访问作者个人网站 http://www.esqabc.com/view/message.html 留言给作者。 如果该案例触犯您的专利,请在这里:http://www.esqabc.com/view/message.html 留言给作者说明原由 作者一经查实,马上删除。
Mr.Vv
2020/06/11
8320
Kubernetes(k8s)1.14 离线版集群 - 部署master节点
K8S集群安装
主要参考 https://github.com/opsnull/follow-me-install-kubernetes-cluster
JadePeng
2018/12/12
4.3K0
Kubernetes 二进制部署(一)单节点部署(Master 与 Node 同一机器)
0. 前言 最近受“新冠肺炎”疫情影响,在家等着,入职暂时延后,在家里办公和学习 尝试通过源码编译二进制的方式在单一节点(Master 与 Node 部署在同一个机器上)上部署一个 k8s 环境,整理相关步骤和脚本如下 参考原文:Kubernetes二进制部署(一)单节点部署 1. 相关概念 1.1 基本架构 1.2 核心组件  1.2.1 Master 1.2.1.1 kube-apiserver 集群的统一入口,各组件协调者 以RESTful API提供接口服务 所有对象资源的增删改查和监听操作都
西凉风雷
2022/11/23
1.5K0
Kubernetes 二进制部署(一)单节点部署(Master 与 Node 同一机器)
[K8s 1.9实践]Kubeadm 1.9 HA 高可用 集群 本地离线镜像部署
将生成好的etcd.pem和etcd-key.pem以及ca.pem三个文件拷贝到目标主机的/etc/etcd/ssl目录下。
sunsky
2020/08/20
1.2K0
[K8s 1.9实践]Kubeadm 1.9 HA 高可用 集群 本地离线镜像部署
二进制安装Kubernetes(k8s) v1.23.6 ---(上)
1.23.3 和 1.23.4 和 1.23.5 和 1.23.6 文档以及安装包已生成。
小陈运维
2022/04/21
1.6K0
第二篇(二进制部署k8s集群---etcd集群搭建)
本文etcd集群用三台centos7搭建完成。 etcd1:192.168.206.31 etcd2:192.168.206.32 etcd3:192.168.206.33
@凌晨
2020/11/23
1.1K0
009.Kubernetes二进制部署kube-apiserver
kube-apiserver、kube-scheduler 和 kube-controller-manager 均以多实例模式运行:
木二
2019/11/18
1.4K0
009.Kubernetes二进制部署kube-apiserver
推荐阅读
相关推荐
Kubernetes 二进制部署(二)集群部署(多 Master 节点通过 Nginx 负载均衡)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档