二进制安装K8s - part3

部署 master 节点

下载二进制组件

cd /server/tools

# 下载 server 安装包
wget https://dl.k8s.io/v1.18.14/kubernetes-server-linux-amd64.tar.gz

# 下载 client 安装包
wget https://dl.k8s.io/v1.18.14/kubernetes-client-linux-amd64.tar.gz

# 下载 node 安装包
wget https://dl.k8s.io/v1.18.14/kubernetes-node-linux-amd64.tar.gz

分发组件

tar -xf kubernetes-server-linux-amd64.tar.gz
cd kubernetes/server/bin/

for ip in k8s-master-01 k8s-master-02 k8s-master-03
do
  scp -i ~/.ssh/id_k8s_cluster kube-apiserver kube-controller-manager kube-scheduler kubectl kubelet kube-proxy root@$ip:/usr/local/bin/
done

创建集群配置文件

在 kubernetes 中,我们需要创建一个配置文件,用来配置集群、用户、命名空间及身份认证等信息。

创建 kube-controller-manager.kubeconfig 文件

创建 kube-scheduler.kubeconfig 文件

创建 kube-proxy.kubeconfig 文件

创建 admin.kubeconfig 文件

配置 TLS bootstrapping

生成 TLSbootstrapping 所需 token

创建 TLSBootstrapping 集群配置文件

triangle-exclamation

创建 TLS 匿名用户

分发集群配置文件

部署 api-server

创建 kube-apiserver 服务配置文件

三个节点都要执行,不能复制,注意 api server IP

参数详解

配置选项
选项说明

--logtostderr=false

输出日志到文件中,不输出到标准错误控制台

--v=2

指定输出日志的级别

--advertise-address

向集群成员通知 apiserver 消息的 IP 地址

--etcd-servers

连接的 etcd 服务器列表

--etcd-cafile

用于 etcd 通信的 SSL CA 文件

--etcd-certfile

用于 etcd 通信的的 SSL 证书文件

--etcd-keyfile

用于 etcd 通信的 SSL 密钥文件

--service-cluster-ip-range

Service 网络地址分配

--bind-address

监听 --seure-port 的 IP 地址,如果为空,则将使用所有接口 (0.0.0.0)

--secure-port=6443

用于监听具有认证授权功能的 HTTPS 协议的端口,默认值是 6443

--allow-privileged

是否启用授权功能

--service-node-port-range

Service 使用的端口范围

--default-not-ready-toleration-seconds

表示 notReady 状态的容忍度秒数

--default-unreachable-toleration-seconds

表示 unreachable 状态的容忍度秒数

--max-mutating-requests-inflight=2000

在给定时间内进行中可变请求的最大数量,0 值表示没有限制(默 认值 200)

--default-watch-cache-size=200

默认监视缓存大小,0 表示对于没有设置默认监视大小的资源,将 禁用监视缓存

--delete-collection-workers=2

用于 DeleteCollection 调用的工作者数量,这被用于加速 namespace 的清理( 默认值 1)

--enable-admission-plugins

资源限制的相关配置

--authorization-mode

在安全端口上进行权限验证的插件的顺序列表,以逗号分隔的列 表

注册 kube-apiserver 服务

分发 kube-apiserver 服务脚本

启动

高可用部署 api-server

负载均衡器有很多种,只要能实现 api-server 高可用都行,这里我们采用官方推荐的 haproxy + keepalived

安装高可用软件

配置haproxy服务

分发至其他节点

启动 haproxy 服务

配置 keepalived 服务

设置监控检查脚本

分发 keepalived 配置文件

配置 k8s-master-02 节点

配置 k8s-master-03 节点

启动 keeplived 服务

部署 kube-controller-manager

创建 kube-controller-manager 配置文件

配置文件详解

配置选项
选项说明

--leader-elect

高可用时启用选举功能

--master

通过本地非安全本地端口 8080 连接 apiserver

--bind-address

监控地址

--allocate-node-cidrs

是否应在 node 节点上分配和设置 Pod 的 CIDR

--cluster-cidr

Controller Manager 在启动时如果设置了--cluster-cidr 参 数,防止不同的节点的 CIDR 地址发生冲突

--service-cluster-ip-range

集群 Services 的 CIDR 范围

--cluster-signing-cert-file

指定用于集群签发的所有集群范围内证书文件(根证书 文件)

--cluster-signing-key-file

指定集群签发证书的 key

--root-ca-file

如果设置,该根证书权限将包含 service acount 的 toker secret,这必须是一个有效的 PEM 编码 CA 包

--service-account-private-key-file

包含用于签署 service account token 的 PEM 编码 RSA 或 者 ECDSA 私钥的文件名

--experimental-cluster-signing-duration

证书签发时间

注册 kube-controller-manager 服务

分发脚本

启动

部署 kube-scheduler 服务

创建kube-scheduler配置文件

创建启动脚本

分发配置文件

启动

查看集群状态

部署 kubelet 服务

创建kubelet配置

配置详解

配置选项
选项意义

--hostname-override

用来配置该节点在集群中显示的主机名,kubelet 设置了 -–hostname-override 参数后,kube-proxy 也需要设置,否则会出现找 不到 Node 的情况

--container-runtime

指定容器运行时引擎

--kubeconfig

kubelet 作为客户端使用的 kubeconfig 认证文件,此文件是由 kube-controller-mananger 自动生成的

--bootstrap-kubeconfig

指定令牌认证文件

--config

指定 kubelet 配置文件

--cert-dir

设置 kube-controller-manager 生成证书和私钥的目录

--image-pull-progress-deadline

镜像拉取进度最大时间,如果在这段时间拉取镜像没有任何进展,将 取消拉取,默认:1m0s

--pod-infra-container-image

每个 pod 中的 network/ipc 名称空间容器将使用的镜像

创建 kubelet-config 配置文件

配置详解

配置选项
选项意义

address

kubelet 服务监听的地址

port

kubelet 服务的端口,默认 10250

readOnlyPort

没有认证/授权的只读 kubelet 服务端口 ,设置为 0 表示禁用,默认 10255

clusterDNS

DNS 服务器的 IP 地址列表

clusterDomain

集群域名, kubelet 将配置所有容器除了主机搜索域还将搜索当前域

创建 kubelet 启动脚本

分发配置文件

配置文件处理

开启 kubelet 服务

配置 kube-proxy 服务

创建kube-proxy配置文件

创建 kube-proxy-config 配置文件

配置文件详解

选项配置
选项意义

clientConnection

与 kube-apiserver 交互时的参数设置

burst: 200

临时允许该事件记录值超过 qps 设定值

kubeconfig

kube-proxy 客户端连接 kube-apiserver 的 kubeconfig 文件路径设置

qps: 100

与 kube-apiserver 交互时的 QPS,默认值 5

bindAddress

kube-proxy 监听地址

healthzBindAddress

用于检查服务的 IP 地址和端口

metricsBindAddress

metrics 服务的 ip 地址和端口。默认:127.0.0.1:10249

clusterCIDR

kube-proxy 根据 --cluster-cidr 判断集群内部和外部流量,指定 --cluster-cidr 或 --masquerade-all 选项后 kube-proxy 才会对访问 Service IP 的请求做 SNAT

hostnameOverride

参数值必须与 kubelet 的值一致,否则 kube-proxy 启动后会找不到该 Node, 从而不会创建任何 ipvs 规则

masqueradeAll

如果使用纯 iptables 代理,SNAT 所有通过服务集群 ip 发送的通信

mode

使用 ipvs 模式

scheduler

当 proxy 为 ipvs 模式时,ipvs 调度类型

创建 kube-proxy 启动脚本

分发配置文件

修改 k8s-master-02 配置文件

修改 k8s-master-03 配置文件

查看配置文件

启动

查看 kubelet 加入集群请求

批准加入

查看加入集群的新节点

设置集群角色

为 master 节点打污点

circle-info

master 节点一般情况下不运行 pod,因此我们需要给 master 节点添加污点使其不被调度

部署集群网络插件

kubernetes 设计了网络模型,但却将它的实现交给了网络插件,CNI 网络插件最主要的功能就是实现 POD 资 源能够跨主机进行通讯。常见的 CNI 网络插件:

  • Flannel

  • Calico

  • Canal

  • Contiv

  • OpenContrail

  • NSX-T

  • Kube-router

下载 Fannel 二进制组件

分发网络组件

将 flanneld 配置写入集群数据库

注册 Flanneld 服务

配置详解

配置选项
选项说明

-etcd-cafile

用于 etcd 通信的 SSL CA 文件

-etcd-certfile

用于 etcd 通信的的 SSL 证书文件

-etcd-keyfile

用于 etcd 通信的 SSL 密钥文件

-etcd-endpoints

所有 etcd 的 endpoints

-etcd-prefix

etcd 中存储的前缀

-ip-masq

-ip-masq=true 如果设置为 true,这个参数的目的是让 flannel 进行 ip 伪装,而不让 docker 进行 ip 伪装。这么做的原因是如果 docker 进行 ip 伪装,流量再从 flannel 出去,其他 host 上看到的 source ip 就是 flannel 的网关 ip,而不是 docker 容器的 ip

分发配置文件

修改 Docker 启动模式

此举是将 docker 的网络交给 flanneld 来管理,形成集群统一管理的网络

分发 Docker 启动脚本

启动 Flanneld 服务

部署 CoreDNS

CoreDNS 用于集群中 Pod 解析 Service 的名字,Kubernetes 基于 CoreDNS 用于服务发现功能

下载配置文件

绑定集群匿名用户权限

修改 CoreDNS 并运行

测试集群 DNS

Last updated