• 欢迎来到本博客,希望可以y一起学习与分享

k8s搭建(二进制)

笔记 benz 1个月前 (04-30) 58次浏览 0个评论 扫描二维码
文章目录[隐藏]

1. 生产环境K8S平台规划

1.1 单Master集群

1.2 多Master集群(HA)

1.3 环境准备

2. 服务器硬件配置推荐

3. 官方提供的三种部署方式

4. 操作系统初始化

5. Etcd集群

Etcd 是一个分布式键值存储系统,Kubernetes 使用 Etcd 进行数据存储,所以先准备一个 Etcd 数据库,为解决 Etcd 单点故障,应采用集群方式部署,这里使用 3 台组建集群,可容忍 1 台机器故障,当然,你也可以使用 5 台组建集群,可容忍 2 台机器故障。

节点名称 IP
etcd-1 192.168.31.64
etcd-2 192.168.31.65
etcd-3 192.168.31.66

注:为了节省机器,这里与 K8s 节点机器复用。也可以独立于 k8s 集群之外部署,只要apiserver 能连接到就

5.1 准备 cfssl 证书生成工

生成证书常用的2种工具:openssl、cfssl(推荐)。
cfssl 是一个开源的证书管理工具,使用 json 文件生成证书,相比 openssl 更方便使用。找任意一台服务器操作,这里用 Master 节点
cfssl安装证书
github: https://github.com/cloudflare/cfssl
官网地址: https://pkg.cfssl.org/

5.2 生成 Etcd 证书

(1)自签证书颁发机构(CA)
创建工作目录:

自签 CA

查看生成文件:

生成证书:

查看文件:

(2)使用自签 CA 签发 Etcd HTTPS 证书
创建证书申请文件:

注:上述文件 hosts 字段中 IP 为所有 etcd 节点的集群内部通信 IP,一个都不能少!为了方便后期扩容可以多写几个预留的 IP。
查看文件:

生成证书:

查看文件:

5.3 从 Github 下载二进制文

github:https://github.com/etcd-io/etcd

5.4 部署 Etcd 集群

以下在master1节点 上操作,为简化操作,待会将master1节点 生成的所有文件拷贝到其它节点.。
(1)创建工作目录并解压二进制包

(2)创建 etcd 配置文件


ETCD_NAME:节点名称,集群中唯一
ETCD_DATA_DIR:数据目录
ETCD_LISTEN_PEER_URLS:集群通信监听地址
ETCD_LISTEN_CLIENT_URLS:客户端访问监听地址
ETCD_INITIAL_ADVERTISE_PEER_URLS:集群通告地址
ETCD_ADVERTISE_CLIENT_URLS:客户端通告地址
ETCD_INITIAL_CLUSTER:集群节点地址
ETCD_INITIAL_CLUSTER_TOKEN:集群 Token
ETCD_INITIAL_CLUSTER_STATE:加入集群的当前状态,new 是新集群,existing 表示加入已有集群
(3)systemd 管理 etc


(4)拷贝刚才生成的证书
把刚才生成的证书拷贝到配置文件中的路径:

(5)启动并设置开机启动

(6)将上面节点 1 所有生成的文件拷贝到其他节点

然后在各个节点分别修改 etcd.conf 配置文件中的节点名称和当前服务器 IP:

最后启动 etcd 并设置开机启动,同上

最后查看etcd 状态

(7)查看集群状态

--endpoints:需要检测的IP

输出:

如果输出上面信息,就说明集群部署成功。如果有问题第一步先看日志:
/var/log/message journalctl -u etcd

踩坑

1、status=1/FAILURE 看清配置/opt/etcd/cfg/etcd.conf 是否缺字符/多字符。
2、修改了配置需要删除 /var/lib/etcd 文件夹,然后reboot。

6、安装 Docker

7. 部署Master组件

7.1 自签 kube-apiserver SSL证书

APIserver是整个集群的入口,只有它启动了,别的组件才可以启动;我们基于https访问,所以需要自签证书。

(1)自签证书颁发机构(CA)

查看文件:

(2)生成证书:

查看:

(3)使用自签 CA 签发 kube-apiserver HTTPS 证书

应用程序访问https api(自签证书)可用通过以下2种方式:
1、证书添加IP可信任
2、携带CA证书
注意:在使用网关、转发等情况下,不能实现携带CA证书,那么我们可用添加信任的IP。
创建证书申请文件:

注意hosts节点,所有需要访问k8s的有关ip都要写进来,包括本机ip,缩主机ip,宿主机默认网关ip。


查看文件:

(2)生成证书:

查看生成文件:

7.2 从 Github 下载k8s二进制文件

下载地址:https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.18.md#server-binaries

注:打开链接你会发现里面有很多包,下载一个 server 包就够了,包含了 Master 和Worker Node 二进制文件

7.3 解压二进制包

7.4 部署 kube-apiserver

1. 创建配置文件

注:上面两个\\ 第一个是转义符,第二个是换行符,使用转义符是为了使用 EOF 保留换行符。
–logtostderr:启用日志
—v:日志等级
–log-dir:日志目录
–etcd-servers:etcd 集群地址
–bind-address:监听地址
–secure-port:https 安全端口
–advertise-address:集群通告地址
–allow-privileged:启用授权
–service-cluster-ip-range:Service 虚拟 IP 地址段
–enable-admission-plugins:准入控制模块
–authorization-mode:认证授权,启用 RBAC 授权和节点自管理
–enable-bootstrap-token-auth:启用 TLS bootstrap 机制
–token-auth-file:bootstrap token 文件
–service-node-port-range:Service nodeport 类型默认分配端口范围
–kubelet-client-xxx:apiserver 访问 kubelet 客户端证书
–tls-xxx-file:apiserver https 证书
–etcd-xxxfile:连接 Etcd 集群证书
–audit-log-xxx:审计日志
2. 拷贝刚才生成的证书
把刚才生成的证书拷贝到配置文件中的路径:

3. 启用 TLS Bootstrapping 机制
TLS Bootstraping:Master apiserver 启用 TLS 认证后,Node 节点 kubelet 和 kube- proxy 要与 kube-apiserver 进行通信,必须使用 CA 签发的有效证书才可以,当 Node节点很多时,这种客户端证书颁发需要大量工作,同样也会增加集群扩展复杂度。为了简化流程,Kubernetes 引入了 TLS bootstraping 机制来自动颁发客户端证书,kubelet会以一个低权限用户自动向 apiserver 申请证书,kubelet 的证书由 apiserver 动态签署。所以强烈建议在 Node 上使用这种方式,目前主要用于 kubelet,kube-proxy 还是由我们统一颁发一个证书。
TLS bootstraping 工作流程

创建上述配置文件中 token 文件:

格式:token,用户名,UID,用户组
token 也可自行生成

4. systemd 管理 api

5. 启动并设置开机启动

查看是否成功启动:

6. 授权 kubelet-bootstrap

6.5 部署 kube-controller-manager

1. 创建配置文件

--cluster-cidr表示pod节点的ip地址段,kube-controller-manager.sh启动文件与kube-proxy.sh启动文件两个要配置成一样。

--service-cluster-ip-range: 表示apiserver服务器的ip地址段,需要跟kube-apiserver启动文件的 –service-cluster-ip-range 参数配置成一致。

--master: 表示跟kube-apiserver内部的通讯地址。通过本地非安全本地端口 8080 连接 apiserver。

–leader-elect:当该组件启动多个时,自动选举(HA)
–cluster-signing-cert-file/–cluster-signing-key-file:自动为 kubelet 颁发证书的 CA,与 apiserver 保持一致

2. systemd 管理 controller-manager

3. 启动并设置开机启动

查看状态:

7.6 部署 kube-scheduler

1. 创建配置文件

–master:通过本地非安全本地端口 8080 连接 apiserver。
–leader-elect:当该组件启动多个时,自动选举(HA)


2. systemd 管理 scheduler

3. 启动并设置开机启动

查看状态:

4. 查看集群状态
所有组件都已经启动成功,通过 kubectl 工具查看当前集群组件状态

如上输出说明 Master 节点组件运行正常。

8、部署 Worker Node

下面还是在 Master Node 上操作,即同时作为 Worker Node

8.1 创建工作目录并拷贝二进制文件

在所有 worker node 创建工作目录:

从 master 节点拷贝:

8.2 部署 kubelet

1. 创建配置文件

–hostname-override:显示名称,集群中唯一
–network-plugin:启用 CNI –kubeconfig:空路径,会自动生成,后面用于连接 apiserver –bootstrap-kubeconfig:首次启动向 apiserver 申请证书
–config:配置参数文件
–cert-dir:kubelet 证书生成目录
–pod-infra-container-image:管理 Pod 网络容器的镜像

–pod-infra-container-image的原来的值是:gcr.io/google_containers/pause-amd64:3.0,由于有国内的原因不能访问,于是在docker hub找到一个镜像作为替换:easzlab/pause-amd64:3.2
还有pause-amd64没有latest标签,标签有3.03.13.2,最新是3.2 (2021-4-30)

2. 配置参数文件

3. 生成 bootstrap.kubeconfig 文件

拷贝到配置文件路径:

4. systemd 管理 kubelet

5. 启动并设置开机启动

查看状态:

8.3 批准 kubelet 证书申请并加入

注:由于网络插件还没有部署,节点会没有准备就绪 NotReady

8.4 部署 kube-proxy

1. 创建配置文件

2. 配置参数文件

默认ipables,如需要ipvs模式(推荐),请参考这篇文章

--cluster-cidr表示pod节点的ip地址段,kube-controller-manager启动文件与kube-proxy文件两个要配置成一样。


3. 生成 kube-proxy.kubeconfig 文件
生成 kube-proxy 证书:

生成 kubeconfig 文件

拷贝到配置文件指定路径:

4. systemd 管理 kube-proxy

5. 启动并设置开机启动

8.5 部署 CNI 网

先准备好 CNI 二进制文件
GitHub:https://github.com/containernetworking/plugins/releases

解压二进制包并移动到默认工作目录:

部署 CNI 网络:

由于https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml国内原因,无法连接,以下是kube-flannel.yml的原文:

注意:kube-flannel.yml文件里的net-conf.json->Network:这个网络要与kube-controller-manager.conf的cluster-cidr的一致

查看部署情况:

以上,即为成功
查看节点情况:

部署好网络插件,Node 准备就绪。

8.6 授权 apiserver 访问 kubelet

8.7 新增加 Worker Node

1. 拷贝已部署好的 Node 相关文件到新节点
在 master 节点将 Worker Node 涉及文件拷贝到新节点 192.168.31.65/66

2. 在上面复制过的Worker Node,删除 kubelet 证书和 kubeconfig 文件

注:这几个文件是证书申请审批后自动生成的,每个 Node 不同,必须删除重新生成。
3. 在每个Worker Node,修改主机名

4. 启动并设置开机启动

5. 在 Master 上批准新 Node kubele

以上,节点以全部加入。

如果,一直是NotReady状态,看看节点是否下载了这两个image,有可能下载不来。

安装CoreDNS

查看这篇文章

参考

二进制部署k8s集群(3):部署kube-apiserver,签发kube-apiserver证书|kuelete证书|kube-proxy证书
二进制安装部署k8s高可用集群V1.20
2020-07-04 搭建一个完整的Kubernetes集群(上)
2020-07-14 搭建一个完整的Kubernetes集群(下)


文章 k8s搭建(二进制) 转载需要注明出处
喜欢 (0)

您必须 登录 才能发表评论!