Kubernetes(九)单Master 部署API Server、controller-manager、scheduler

一、在master节点下载二进制包 https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.16.md#v1161   二、选择kubernetes-server-linux-amd64.tar.gz下载 wget https://storage.googleapis.com/kubernetes-release/release/v1.16.6/kubernetes-server-linux-amd64.tar.gz   三、解压文件 tar zxvf kubernetes-server-linux-amd64.tar.gz   四、得到kubernetes目录 cd kubernetes     五、我们只需要kubernetes/server/bin以下文件
  • kube-apiserver
  • kubectl
  • kube-controller-manager
  • kube-scheduler
  以上是为了获取最新的k8s,所以可以去官网下载k8s安装的二进制文件,我们还需要一些其他的辅助文件: 下面的文件实际上可以正常运行的,可以跳过一至五这个步骤   Kubernetes(九)单Master 部署API Server、controller-manager、schedulerk8s-master.tar.gz
86.6 MB

 

解压文件tar zxvf k8s-master.tar.gz 输出以下内容: 查看目录结构 tree kubernetes kubernetes
├── bin #安装程序,bin文件我们可以利用官方的新版本替换掉
│   ├── kube-apiserver
│   ├── kube-controller-manager
│   ├── kubectl
│   └── kube-scheduler
├── cfg #配置文件
│   ├── kube-apiserver.conf
│   ├── kube-controller-manager.conf
│   ├── kube-scheduler.conf
│   └── token.csv
├── logs #存放日志
└── ssl #存放证书   查看cat kube-apiserver.conf文件 输出以下内容:
KUBE_APISERVER_OPTS="--logtostderr=false \ #输出日志
--v=2 \  #日志级别 0-8级别范围
--log-dir=/opt/kubernetes/logs \ #日志输出目录
--etcd-servers=https://192.168.31.61:2379,https://192.168.31.62:2379,https://192.168.31.63:2379 \ #etcd服务地址配置
--bind-address=192.168.31.61 \ #本机IP(内网IP)
--secure-port=6443 \ #端口
--advertise-address=192.168.31.61 \ #通告地址,一般和本机IP一样,告诉node通过哪个IP来链接访问
--allow-privileged=true \ #允许创建的容器具有超级管理员权限
--service-cluster-ip-range=10.0.0.0/24 \ #service IP范围,service会分配这个IP段的IP地址
--enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,ResourceQuota,NodeRestriction \ #启用控制插件,属于k8s高级功能,比如资源配额限制等
--authorization-mode=RBAC,Node \ #授权模式,一般使用rbac角色来访问
--enable-bootstrap-token-auth=true \ #启用bootstrap,为他们自动颁发证书,在token.csv 定义具体内容
--token-auth-file=/opt/kubernetes/cfg/token.csv \
--service-node-port-range=30000-32767 \ #暴露servicenode的端口 #kubelet证书 --kubelet-client-certificate=/opt/kubernetes/ssl/server.pem \
--kubelet-client-key=/opt/kubernetes/ssl/server-key.pem \   #apiserver使用https证书
--tls-cert-file=/opt/kubernetes/ssl/server.pem \ 
--tls-private-key-file=/opt/kubernetes/ssl/server-key.pem \
--client-ca-file=/opt/kubernetes/ssl/ca.pem \
--service-account-key-file=/opt/kubernetes/ssl/ca-key.pem \   #etcd使用https证书
--etcd-cafile=/opt/etcd/ssl/ca.pem \
--etcd-certfile=/opt/etcd/ssl/server.pem \
--etcd-keyfile=/opt/etcd/ssl/server-key.pem \   #日志审计配置
--audit-log-maxage=30 \
--audit-log-maxbackup=3 \
--audit-log-maxsize=100 \
--audit-log-path=/opt/kubernetes/logs/k8s-audit.log"

更多配置明细访问官网 https://kubernetes.io/zh/docs/reference/kubernetes-api/ 命令行工具参考查看     查看cat kube-controller-manager.conf文件 输出以下内容:   KUBE_CONTROLLER_MANAGER_OPTS="--logtostderr=false \ #配置日志
--v=2 \ #配置日志级别
--log-dir=/opt/kubernetes/logs \ #配置日志目录
--leader-elect=true \  #集群选举,api server才做高可用, kube-controller-manager本身会基于etcd来实现高可用,启用该选项即可
--master=127.0.0.1:8080 \  #apiserver的IP,我们设置链接本地,8080是apiserver监听端口,它默认会开放该端口
--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 \ #server的IP范围,和 kube-apiserverIP范围是一样的   #集群签名的证书,node加入集群颁发自动颁发kubelet证书,kubelet由controller-manager颁发,controller-manager由下面配置的颁发
--cluster-signing-cert-file=/opt/kubernetes/ssl/ca.pem \
--cluster-signing-key-file=/opt/kubernetes/ssl/ca-key.pem \   #签署service-account所需要的私钥
--root-ca-file=/opt/kubernetes/ssl/ca.pem \ --service-account-private-key-file=/opt/kubernetes/ssl/ca-key.pem \   #为node颁发证书时间,10年
--experimental-cluster-signing-duration=87600h0m0s"

查看cat kube-scheduler.conf文件 输出以下内容: KUBE_SCHEDULER_OPTS="--logtostderr=false \
--v=2 \
--log-dir=/opt/kubernetes/logs \
--leader-elect \ #多个scheduler集群选举 --master=127.0.0.1:8080 \  #链接apiserver地址
--address=127.0.0.1" #监听本地地址   六、将证书复制到目录 cp /root/TLS/k8s/*.pem /root/kubernetes/ssl/ cp /root/TLS/k8s/*.pem /opt/kubernetes/ssl/ kube-proxy.pem在master不会使用,可以不用复制 七、配置文件 vi kube-apiserver.conf 我们需要在每台机器设置自己的IP,只需要修改apiserver.cnf即可,其他服务都是监听127.0.0.1的地址   八、将文件移动到工作目录 mv /root/kubernetes/ /opt/ mv kube-apiserver.service kube-controller-manager.service kube-scheduler.service /usr/lib/systemd/system    九、启动服务 systemctl start kube-apiserver systemctl start kube-controller-manager systemctl start kube-scheduler   十、查看日志 ls /opt/kubernetes/logs/ less /opt/kubernetes/logs/kube-apiserver.INFO
tail /opt/kubernetes/logs/kube-controller-manager.info   十一、设置开机启动 for i in $(ls /opt/kubernetes/bin/);do systemctl enable $i;done
也可以一个个单独设置,这里循环设置的;   十二、kubectl 移动到环境变量 mv /opt/kubernetes/bin/kubectl /usr/local/bin/ 关于启动情况的排查: ps -ef |grep *#查看启动进程 ps -ef |grep kube-apiserver ps -ef |grep kube-controller-manager ps -ef |grep kube-scheduler   #查看端口监听情况 netstat -ntlp    #查看日志 systemctl -l status kube-apiserver systemctl -l status kube-controller-manager systemctl -l status kube-scheduler   十三、查看启动的情况 kubectl get cs 输出以下结果: NAME AGE
scheduler <unknown>
controller-manager <unknown>
etcd-1 <unknown>
etcd-2 <unknown>
etcd-0 <unknown>
十四、因为我们启动了bootstrap自动颁发证书,所以还需要对用户进行设置 cat /opt/kubernetes/cfg/token.csv 输出结果: c47ffb939f5ca36231d9e3121a252940,kubelet-bootstrap,10001,"system:node-bootstrapper"[root@k8s-master1 k8s]# 结构:token,用户,uid,用户组   因为这个用户是没有权限的,需要我们在master1机器上给该用户授权 kubectl create clusterrolebinding kubelet-bootstrap \
--clusterrole=system:node-bootstrapper \
--user=kubelet-bootstrap   附录: 自己生成token  head -c 16 /dev/urandom | od -An -t x | tr -d ' '  

但apiserver配置的token必须要与node节点bootstrap.kubeconfig配置里一致。

关于bootstrap.kubeconfig我们在下一节说明
上一篇:内网Https 自签Https证书 配合Tomcat 实现内网Https详细图文


下一篇:Web信息安全实践_1.7 OpenSSL