k8s 二进制安装 详细安装步骤(一)

本文涉及的产品
Digicert DV 证书 单域名,20个 3个月
日志服务 SLS,月写入数据量 50GB 1个月
简介: k8s 二进制安装 详细安装步骤(一)

一    实验环境

k8s集群master01:192.168.217.66    kube-apiserver kube-controller-manager kube-scheduler etcd

k8s集群master02:192.168.217.77

k8s集群node01:192.168.217.88    kubelet kube-proxy docker

k8s集群node02:192.168.217.99

etcd集群节点1:192.168.217.66    etcd

etcd集群节点2:192.168.217.88    etcd

etcd集群节点3:192.168.217.99    etcd

负载均衡nginx+keepalive01(master):192.168.217.22

负载均衡nginx+keepalive02(backup):192.168.217.44

VIP 192.168.10.100

 

二   操作系统初始化配置(所有机器)

1,关闭防火墙

systemctl stop firewalld
systemctl disable firewalld
iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
 
#
iptables -F:这一部分命令是用来清空filter表中的所有规则链(包括INPUT、OUTPUT、FORWARD)。这意味着所有进入、离开或通过系统的数据包都将按照默认策略处理,通常是接受(ACCEPT)或拒绝(DROP)。
 
iptables -t nat -F:这里,-t nat指定了操作表为nat表,-F则表示清空。它会清空nat表内的规则,包括PREROUTING、POSTROUTING和OUTPUT链。这些规则通常用于网络地址转换(NAT),比如端口转发或者IP伪装。
 
iptables -t mangle -F:这部分命令清空了mangle表中的规则。mangle表用于修改数据包的服务类型、TTL(生存时间)值或标记等,通常涉及到更高级的路由和QoS(服务质量)控制。
 
iptables -X:此命令用于删除用户自定义的(非内置的)链。这不会影响INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING这样的内置链,而是会删除你自己创建的任何额外链。
 
综上所述,执行这个命令后,你的iptables规则将会被完全重置,所有的自定义规则都会被清除,系统将恢复到iptables的初始默认状态。在执行此操作前,请确保你了解这将对你的系统网络安全设置产生的影响,并已经做好了相应的备份或有恢复策略。

2,关闭selinux

swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab 
# -r 是开启扩展正则 将.*swap.*  换成#$

3,关闭swap

swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab 
# -r 是开启扩展正则 将.*swap.*  换成#$

4, 根据规划设置主机名

hostnamectl set-hostname master01
hostnamectl set-hostname master02
hostnamectl set-hostname node01
hostnamectl set-hostname node02

5, 做域名映射

cat >> /etc/hosts << EOF
192.168.217.66 master01
192.168.217.77 master02
192.168.217.88 node01
192.168.217.99 node02
EOF

6,调整内核参数

cat > /etc/sysctl.d/k8s.conf << EOF
#开启网桥模式,可将网桥的流量传递给iptables链
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
#关闭ipv6协议
net.ipv6.conf.all.disable_ipv6=1
net.ipv4.ip_forward=1
EOF
 
 
sysctl --system
##
sysctl --system 命令用于从系统配置文件(通常是 /etc/sysctl.conf 以及 /etc/sysctl.d/ 目录下的其他配置文件)中读取并应用内核参数设置。当执行这个命令时,系统会遍历这些配置文件,将其中定义的内核参数值应用到当前运行的内核中,从而实现对系统行为的调整,例如开启或关闭IP转发、调整网络缓冲区大小、改变文件系统的行为等,而无需重启系统。

7, 时间同步

yum install ntpdate -y
ntpdate time.windows.com
 

三   部署 docker引擎(node 节点)

yum install -y yum-utils device-mapper-persistent-data lvm2 
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 
yum install -y docker-ce docker-ce-cli containerd.io
 
systemctl start docker.service
systemctl enable docker.service 

四    部署 etcd 集群

CFSSL 是为etcd 的准备的  

CFSSL 生成的 密钥文件  会拖到 etcd 的ssl 目录中

1, etcd 介绍

1.1 etcd 是什么

etcd是CoreOS团队于2013年6月发起的开源项目,它的目标是构建一个高可用的分布式键值(key-value)数据库。etcd内部采用raft协议作为一致性算法,etcd是go语言编写的。

1.2 etcd 特点

etcd 作为服务发现系统,有以下的特点:

简单:安装配置简单,而且提供了HTTP API进行交互,使用也很简单

安全:支持SSL证书验证

快速:单实例支持每秒2k+读操作

可靠:采用raft算法,实现分布式系统数据的可用性和一致性

 

1.3   etcd 端口

etcd 目前默认使用2379端口提供HTTP API服务, 2380端口和peer通信(这两个端口已经被IANA(互联网数字分配机构)官方预留给etcd)。 即etcd默认使用2379端口对外为客户端提供通讯,使用端口2380来进行服务器间内部通讯。

etcd 在生产环境中一般推荐集群方式部署。由于etcd 的leader选举机制,要求至少为3台或以上的奇数台。

2,  准备签发证书环境

CFSSL 是 CloudFlare 公司开源的一款 PKI/TLS 工具。 CFSSL 包含一个命令行工具一个用于签名、验证和捆绑 TLS 证书的 HTTP API 服务。使用Go语言编写。

CFSSL 使用配置文件生成证书,因此自签之前,需要生成它识别的 json 格式的配置文件,CFSSL 提供了方便的命令行生成配置文件。

CFSSL 用来为 etcd 提供 TLS 证书,它支持签三种类型的证书:

1、client 证书,服务端连接客户端时携带的证书,用于客户端验证服务端身份,如 kube-apiserver 访问 etcd;

2、server 证书,客户端连接服务端时携带的证书,用于服务端验证客户端身份,如 etcd 对外提供服务;

3、peer 证书,相互之间连接时使用的证书,如 etcd 节点之间进行验证和通信

这里全部都使用同一套证书认证。

 

3, 下载CFSSL三个工具

下载

#准备cfssl证书生成工具
wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 -O /usr/local/bin/cfssl
wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 -O /usr/local/bin/cfssljson
wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 -O /usr/local/bin/cfssl-certinfo

移到指定目录   加权限

cfssl:证书签发的工具命令
cfssljson:将 cfssl 生成的证书(json格式)变为文件承载式证书
cfssl-certinfo:验证证书的信息
cfssl-certinfo -cert <证书名称>     #查看证书的信息

4,  生成Etcd证书

准备k8s 目录

上传 etcd-cert.sh (生成CFSSL 证书的脚本) etcd.sh (启动 etcd 的脚本)到 /opt/k8s/ 目录中

并加 执行权限

创建用于生成CA证书、etcd 服务器证书以及私钥的目录   将脚本移过去

编写脚本  注意更改证书 生命周期  以及etcf 服务器的ip 地址

运行脚本 生成CA证书、etcd 服务器证书以及私钥

  1. ca-config.json:CA(Certificate Authority,证书颁发机构)的配置文件,定义了如何生成CA证书的规则,比如默认有效期、密钥使用算法等。
  2. ca-csr.json:CA证书签名请求文件(Certificate Signing Request),包含了请求CA签发证书所需的信息。
  3. ca.pem:CA的公钥证书文件,用于验证由该CA签发的所有证书的真实性。
  4. server.csr:服务器证书的签名请求文件,用于请求签发特定服务器的TLS证书。
  5. server-key.pem:服务器私钥文件,与server.pem一起用于服务器的TLS加密通信。
  6. server-csr.json:另一个服务器证书签名请求文件,可能用于不同目的或备份。
  7. server.pem:服务器的公钥证书文件,包含了服务器的公钥以及由CA签名的证书信息。
  8. etcd-cert.sh:一个脚本文件,可能是用来自动化执行上述TLS证书生成过程的Shell脚本。

5,下载 etcd 的安装包,启动etcd

下载 etcd 的安装包 到/opt/k8s

https://github.com/etcd-io/etcd/releases/download/v3.4.9/etcd-v3.4.9-linux-amd64.tar.gz

解压安装包并查看  

etcd就是etcd 服务的启动命令,后面可跟各种启动参数
etcdctl主要为etcd 服务提供了命令行操作

创建用于存放 etcd 配置文件命令文件,证书的目录

把 原来 压缩包解压出来的  etcd  etcdctl 移动到 bin

将把4个.pem 结尾的   证书 放ssl

写etcd 启动脚本 (根据脚本示例   用位置变量 跟三个etcd 的ip来启动)脚本

确保所有的启动etcd 的准备环境(cfg 配置文件目前是空的  在启动etcd 脚本后会自动生成)

启动etcd 启动脚本

cd /opt/k8s/
 
 
./etcd.sh etcd01 192.168.217.66 etcd02=https://192.168.217.88:2380,etcd03=https://192.168.217.99:2380
 
#
进入卡住状态等待其他节点加入,这里需要三台etcd服务同时启动,如果只启动其中一台后,服务会卡在那里,直到集群中所有etcd节点都已启动,可忽略这个情况

可另外打开一个窗口查看etcd进程是否正常ps -ef | grep etcd

注意 他可能会报超时的错误  查看端口都正常运行

6, 把etcd相关证书文件、命令文件和服务管理文件全部拷贝到另外两个etcd集群节点

拷贝etcd 目录 下的所有文件(证书  配置文件 二进制文件)

拷贝服务管理文件

scp /usr/lib/systemd/system/etcd.service root@192.168.217.99:/usr/lib/systemd/system/
 
scp /usr/lib/systemd/system/etcd.service root@192.168.217.88:/usr/lib/systemd/system/

7, 在 node01 节点上操作(etcd02 )

vim /opt/etcd/cfg/etcd   写etcd02 的配置文件

启动etcd服务

8, 在 node02 节点上操作(etcd03 )

vim /opt/etcd/cfg/etcd

9 ,查看etcd主从 状态

启动顺序: 应先启动etcd01   再启动etcd02 03

9.1 检查etcd群集状态
ETCDCTL_API=3   /opt/etcd/bin/etcdctl --cacert=/opt/etcd/ssl/ca.pem --cert=/opt/etcd/ssl/server.pem --key=/opt/etcd/ssl/server-key.pem --endpoints="https://192.168.217.66:2379,https://192.168.217.88:2379,https://192.168.217.99:2379" endpoint health --write-out=table
 
##########
 
------------------------------------------------------------------------------------------
--cert-file:识别HTTPS端使用SSL证书文件
--key-file:使用此SSL密钥文件标识HTTPS客户端
--ca-file:使用此CA证书验证启用https的服务器的证书
--endpoints:集群中以逗号分隔的机器地址列表
cluster-health:检查etcd集群的运行状况

9.2 更详细检查etcd群集状态
ETCDCTL_API=3 /opt/etcd/bin/etcdctl --cacert=/opt/etcd/ssl/ca.pem --cert=/opt/etcd/ssl/server.pem --key=/opt/etcd/ssl/server-key.pem --endpoints="https://192.168.217.66:2379,https://192.168.217.88:2379,https://192.168.217.99:2379" endpoint status --write-out=table
 
 
######
------------------------------------------------------------------------------------------
--cert-file:识别HTTPS端使用SSL证书文件
--key-file:使用此SSL密钥文件标识HTTPS客户端
--ca-file:使用此CA证书验证启用https的服务器的证书
--endpoints:集群中以逗号分隔的机器地址列表
cluster-health:检查etcd集群的运行状况

  • ENDPOINT: 表示etcd集群中每个成员的访问地址和端口。
  • ID: 是每个etcd节点在集群中的唯一标识符,通常是一个随机生成的字符串。
  • VERSION: 显示etcd服务器的版本号。
  • DB SIZE: 数据库的大小,这里以“20 kB”为例,表示当前etcd节点存储的数据量大小。
  • IS LEADER: 指示该节点是否为集群中的领导者(Leader)。在Raft共识算法中,集群中只有一个Leader负责处理所有写操作和协调集群状态。结果显示为truefalse
  • IS LEARNER: 表示该节点是否为学习者(Learner)节点,学习者节点接收复制的日志条目但不参与选举。结果显示为truefalse
  • RAFT TERM: Raft协议中的任期号(Term),用于选举领导和日志复制的逻辑时钟。每当选举出新的领导者时,任期号就会递增。
  • RAFT INDEX: 当前Raft日志条目的索引,表示了Raft日志的最新位置。
  • RAFT APPLIED INDEX: 已经被应用到状态机的日志条目索引,这个值应该总是小于等于RAFT INDEX,表示哪些日志已经被实际执行。
  • ERRORS: 如果在检查该节点状态时遇到任何错误,这一列将显示具体的错误信息。如果没有错误,则为空。
9.3  查看etcd集群成员列表
ETCDCTL_API=3 /opt/etcd/bin/etcdctl --cacert=/opt/etcd/ssl/ca.pem --cert=/opt/etcd/ssl/server.pem --key=/opt/etcd/ssl/server-key.pem --endpoints="https://192.168.217.66:2379,https://192.168.217.88:2379,https://192.168.217.99:2379" --write-out=table member list

k8s 二进制安装 详细安装步骤(二):https://developer.aliyun.com/article/1525913?spm=a2c6h.13046898.publish-article.26.7a936ffaSY7sC1

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
19天前
|
Kubernetes Ubuntu Linux
我应该如何安装Kubernetes
我应该如何安装Kubernetes
|
2月前
|
Kubernetes Ubuntu Docker
从0开始搞K8S:使用Ubuntu进行安装(环境安装)
通过上述步骤,你已经在Ubuntu上成功搭建了一个基本的Kubernetes单节点集群。这只是开始,Kubernetes的世界广阔且深邃,接下来你可以尝试部署应用、了解Kubernetes的高级概念如Services、Deployments、Ingress等,以及探索如何利用Helm等工具进行应用管理,逐步提升你的Kubernetes技能树。记住,实践是最好的老师,不断实验与学习,你将逐渐掌握这一强大的容器编排技术。
179 1
|
2月前
|
Kubernetes Linux 开发工具
centos7通过kubeadm安装k8s 1.27.1版本
centos7通过kubeadm安装k8s 1.27.1版本
|
2月前
|
存储 Kubernetes 负载均衡
基于Ubuntu-22.04安装K8s-v1.28.2实验(四)使用域名访问网站应用
基于Ubuntu-22.04安装K8s-v1.28.2实验(四)使用域名访问网站应用
32 1
|
2月前
|
负载均衡 应用服务中间件 nginx
基于Ubuntu-22.04安装K8s-v1.28.2实验(二)使用kube-vip实现集群VIP访问
基于Ubuntu-22.04安装K8s-v1.28.2实验(二)使用kube-vip实现集群VIP访问
59 1
|
2月前
|
Kubernetes 网络协议 安全
[kubernetes]二进制方式部署单机k8s-v1.30.5
[kubernetes]二进制方式部署单机k8s-v1.30.5
|
2月前
|
Kubernetes Docker 容器
rancher docker k8s安装(二)
rancher docker k8s安装(二)
56 0
|
2月前
|
Kubernetes 容器
基于Ubuntu-22.04安装K8s-v1.28.2实验(三)数据卷挂载NFS(网络文件系统)
基于Ubuntu-22.04安装K8s-v1.28.2实验(三)数据卷挂载NFS(网络文件系统)
140 0
|
13天前
|
Kubernetes 监控 Cloud Native
Kubernetes集群的高可用性与伸缩性实践
Kubernetes集群的高可用性与伸缩性实践
46 1
|
2月前
|
JSON Kubernetes 容灾
ACK One应用分发上线:高效管理多集群应用
ACK One应用分发上线,主要介绍了新能力的使用场景