我是靠谱客的博主 悦耳小丸子,这篇文章主要介绍k8s 二进制安装master(单master),现在分享给大家,希望可以做个参考。

环境准备
在这里插入图片描述

  1. 关闭防火墙和selinux
  2. 关闭swap分区
    swap分区会影响到容器
  3. 设置hosts
    可以把服务器都是设置成域名的方式,以便日后的ip更改
  4. 设置桥接的IPv4流量传递到iptables的链
    由于网桥工作于数据链路层,在iptables没有开启 bridge-nf时,数据会直接经过网桥转发,结果就是对FORWARD的设置失效,centos默认不开启 bridge-nf
  5. 集群时间同步
    集群需要时间的同步,避免发生未知错误

关闭swap分区

swapoff -a # 临时
sed -ri ‘s/.swap./#&/’ /etc/fstab # 永久

设置桥接的IPv4流量传递到iptables的链

复制代码
1
2
3
4
5
6
cat > /etc/sysctl.d/k8s.conf << EOF net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF sysctl --system # 生效

集群时间同步

https://blog.csdn.net/yangshihuz/article/details/105020936

下载master二进制包

下载二进制包

复制代码
1
2
3
4
https://github.com/kubernetes/kubernetes/tree/master/CHANGELOG #可以查看各个版本的下载及版本更新说明,我选择的是1.9的最后一个版本v1.9.11

在这里插入图片描述
master服务

  • API Server:所有服务的访问入口
  • scheduler:负责任务的节点选择和分配,关于多节点必要都需要调度器
  • controller-manager:属于Pod的控制器,目的是维持副本的期望数量,属于冗余方案

下载包里server下4个文件复制到master上(/usr/local/bin),并授权chmod 755
kube-apiserver,kube-controller-manager,kube-scheduler,kubectl

kube-apiserver配置

1、生成基于kube-apiserver证书

基于前一篇的网络搭建的ca证书,生成kube-apiserver证书(也可以单独生成一个ca证书)
证书认证分2种:
1、授权主机认证(下面讲到的k8s-api.json文件内的hosts)
2、携带ca证书认证(对于无法携带ca证书的服务就需要使用第一种)

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
cat k8s-api.json { "CN": "k8s-api", "hosts": [ "192.168.12.2", "192.168.12.3", "192.168.12.4", "192.168.12.5", "${k8s-vip}", "${k8s-res1}", "${k8s-res2}" ], "key": { "algo": "rsa", "size": 2048 }, "names": [ { "C": "CN", "L": "SHANGHAI", "ST": "SHANGHAI" } ] } #hosts认证主机可以预留几个用变量声明。便于以后使用 cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=server k8s-api.json | cfssljson -bare /opt/etcd/ssl/k8s/k8s-api #-profile=server 是ca配置json中定义的 #k8s-api.json kube-apiserver生成配置 #/opt/etcd/ssl/k8s/k8s-api 指定生成的文件存放路径

2、启动kube-apiserver

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
mkdir -p /usr/local/k8s/{conf,ssl,logs} #创建k8s的工作目录 cat kube-apiserver.conf KUBE_APISERVER_OPTS="--logtostderr=false --v=2 --log-dir=/usr/local/k8s/logs --etcd-servers=https://192.168.12.10:2379,https://192.168.12.11:2379,https://192.168.12.12:2379 --bind-address=192.168.12.2 --secure-port=6443 --advertise-address=192.168.12.2 --allow-privileged=true --service-cluster-ip-range=10.0.0.0/24 --admission-control=NamespaceLifecycle,LimitRanger,ServiceAccount,ResourceQuota,NodeRestriction --authorization-mode=RBAC,Node --enable-bootstrap-token-auth=true --token-auth-file=//usr/local/k8s/conf/token.csv --service-node-port-range=30000-32767 --kubelet-client-certificate=/usr/local/k8s/ssl/k8s-api.pem --kubelet-client-key=/usr/local/k8s/ssl/k8s-api-key.pem --tls-cert-file=/usr/local/k8s/ssl/k8s-api.pem --tls-private-key-file=/usr/local/k8s/ssl/k8s-api-key.pem --client-ca-file=/usr/local/k8s/ssl/ca.pem --service-account-key-file=/usr/local/k8s/ssl/ca-key.pem --etcd-cafile=/usr/local/k8s/ssl/ca.pem --etcd-certfile=/usr/local/k8s/ssl/server.pem --etcd-keyfile=/usr/local/k8s/ssl/server-key.pem --audit-log-maxage=30 --audit-log-maxbackup=3 --audit-log-maxsize=100 --audit-log-path=/usr/local/k8s//logs/k8s-audit.log" #在conf目录下创建api的配置文件(就是kube-apiserver启动参数,最后当变量传递给systemd管理启动) #--admission-control v1.9.11是需要改成这个参数,可以--help查看 #kube-apiserver 加上面的参数尝试启动,看是否报错,但是命令使用码号不要带

kube-apiserver --help

  • –logtostderr:启用日志
  • —v:日志等级
  • –log-dir:日志目录
  • –etcd-servers:etcd集群地址
  • –bind-address:监听地址
  • –secure-port:https安全端口
  • –advertise-address:集群通告地址
  • –allow-privileged:设置为true时,kubernetes允许在Pod中运行拥有系统特权的容器应用
  • –service-cluster-ip-range:Service虚拟IP地址段
  • ––admission-control:准入控制模块
  • –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:审计日志

启用 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还是由我们统一颁发一个证书。

token文件配置

复制代码
1
2
3
4
5
6
7
head -c 16 /dev/urandom | od -An -t x | tr -d ' ' #自动生成一个随机token cat token.csv 64c8a4bd1c2e920aa92049044b5197ba,kubelet-bootstrap,10001,"system:kubelet-bootstrap" #格式:token,用户名,UID,用户组

授权kubelet-bootstrap用户允许请求证书

复制代码
1
2
3
4
5
kubectl create clusterrolebinding kubelet-bootstrap --clusterrole=system:node-bootstrapper --user=kubelet-bootstrap #kubectl也在二进制下载的包里

创建systemd文件管理(确保上面启动没有报错)

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
cat /usr/lib/systemd/system/kube-apiserver.service [Unit] Description=Kubernetes API Server Documentation=https://github.com/kubernetes/kubernetes [Service] EnvironmentFile=/usr/local/k8s/conf/kube-apiserver.conf ExecStart=/usr/local/bin/kube-apiserver $KUBE_APISERVER_OPTS Restart=on-failure [Install] WantedBy=multi-user.target #EnvironmentFile=环境变量文件就是conf里的配置文件kube-apiserver.conf #$KUBE_APISERVER_OPTS 变量带进去 systemctl start kube-apiserver systemctl enable kube-apiserver #启动kube-apiserver

kube-controller-manager配置

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
cat kube-controller-manager.conf KUBE_CONTROLLER_MANAGER_OPTS="--logtostderr=false --v=2 --log-dir=/usr/local/k8s/logs --leader-elect=true --master=127.0.0.1:8080 --address=127.0.0.1 --allocate-node-cidrs=true --cluster-cidr=10.244.0.0/16 --service-cluster-ip-range=10.0.0.0/24 --cluster-signing-cert-file=/usr/local/k8s/ssl/ca.pem --cluster-signing-key-file=/usr/local/k8s/ssl/ca-key.pem --root-ca-file=/usr/local/k8s/ssl/ca.pem --service-account-private-key-file=/usr/local/k8s/ssl/ca-key.pem --experimental-cluster-signing-duration=87600h0m0s" #kube-controller-manager 加上面的参数尝试启动,看是否报错,但是命令使用码号不要带

kube-controller-manager --help

  • master: Kubernetes API 服务器的地址,内部访问8080,外部暴露6443
  • address:监听地址,和master一台机器上
  • cluster-cidr:集群中 Pods 的范围
  • service-cluster-ip-range:server服务的地址范围,同master一样
  • experimental-cluster-signing-duration:自动续签kubelet client证书,默认为1年

创建systemd文件管理

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
cat /usr/lib/systemd/system/kube-controller-manager.service [Unit] Description=Kubernetes Controller Manager Documentation=https://github.com/kubernetes/kubernetes [Service] EnvironmentFile=/usr/local/k8s/conf/kube-controller-manager.conf ExecStart=/usr/local/bin/kube-controller-manager $KUBE_CONTROLLER_MANAGER_OPTS Restart=on-failure [Install] WantedBy=multi-user.target systemctl start kube-controller-manager.service systemctl enable kube-controller-manager.service #启动kube-controller-manager

配置kube-scheduler

复制代码
1
2
3
4
5
6
7
8
cat kube-scheduler.conf KUBE_SCHEDULER_OPTS="--logtostderr=false --v=2 --log-dir=/opt/kubernetes/logs --leader-elect --master=127.0.0.1:8080 --address=127.0.0.1"

kube-scheduler --help

创建systemd文件管理

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
cat /usr/lib/systemd/system/kube-scheduler.service [Unit] Description=Kubernetes Scheduler Documentation=https://github.com/kubernetes/kubernetes [Service] EnvironmentFile=/usr/local/k8s/conf/kube-scheduler.conf ExecStart=/usr/local/bin/kube-scheduler $KUBE_SCHEDULER_OPTS Restart=on-failure [Install] WantedBy=multi-user.target systemctl start kube-scheduler.service systemctl enable kube-scheduler.service #启动kube-scheduler

查看组件状态

复制代码
1
2
kubectl get cs

在这里插入图片描述

参考:尚硅谷-k8s教程

修正1

k8s-api.json 文件编写问题

参考网上的资料是写了很多ip和域名的,但是由于我自己没有明白为什么需要,所以当初只加了节点IP,而后面搭建CoreDNS的时候终于知道为什么要加上Server的IP,不懂的可以不用加,后面遇到问题了再添加重新生成覆盖文件即可,这个有便于学习k8s的通讯机制,而变量输入测试也是无效的,所以网上资料仅仅作为参考,不能全盘抄写

最后

以上就是悦耳小丸子最近收集整理的关于k8s 二进制安装master(单master)的全部内容,更多相关k8s内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(111)

评论列表共有 0 条评论

立即
投稿
返回
顶部