zoukankan      html  css  js  c++  java
  • Kubernetes(九)单Master集群 部署API Server、controller-manager、scheduler

    一、在master节点下载二进制包
     
    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安装的二进制文件,我们还需要一些其他的辅助文件:
    下面的文件实际上可以正常运行的,可以跳过一至五这个步骤
     
    解压文件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我们在下一节说明
  • 相关阅读:
    BestCoder Round #67 (div.2) N bulbs(hdu 5600)
    蓝桥杯 基础练习 特殊回文数
    蓝桥杯 基础练习 十进制转十六进制
    蓝桥杯 基础练习 十六进制转十进制
    蓝桥杯 基础练习 十六进制转八进制
    蓝桥杯 入门训练 Fibonacci数列
    Codeforces 600B Queries about less or equal elements(二分查找)
    Codeforces Round #332 (Div. 二) B. Spongebob and Joke
    Codeforces Wilbur and Array
    UVA 10129-Play on Words(欧拉通路)
  • 原文地址:https://www.cnblogs.com/TSir/p/12238515.html
Copyright © 2011-2022 走看看