• 【k8s学习2】二进制文件方式安装 Kubernetes之kubernetesmaster部署


    【k8s学习2】二进制文件方式安装 Kubernetes之etcd集群部署_温殿飞的博客-CSDN博客

     如果已经完成了etcd的部署,可以按照这个文章继续部署。

    部署安全的kubernetes master高可用集群。

    (1)下载kubernetes

     直接到github网站上搜索kubernetes,然后点击对应的项目进入。

    找到releases页面

    https://github.com/kubernetes/kubernetes/releases?page=1

    然后再对应版本点击CHANGELOG就会跳转到下面页面,1.19即版本号,url里面可以直接修改。 

     https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.19.md 

    页面往下拉找到对应的版本, 点击Server Binaries,按道理应该会调到对应版本的下载段但是我的没有跳转。

    直接往下拉滚动条找到对应的版本。

     再往下拉倒server binaries就可以看到下载地址了。

    wget https://dl.k8s.io/v1.19.0/kubernetes-server-linux-amd64.tar.gz

    wget https://dl.k8s.io/v1.19.0/kubernetes-client-darwin-amd64.tar.gz

    wget https://dl.k8s.io/v1.19.0/kubernetes-node-linux-amd64.tar.gz

    解压kubernetes-server-linux-amd64.tar.gz

    #tar -zxvf kubernetes-server-linux-amd64.tar.gz

    #cd kubernetes/server/bin/

    #ls
    apiextensions-apiserver  kube-apiserver             kube-controller-manager             kubectl     kube-proxy.docker_tag  kube-scheduler.docker_tag
    kubeadm                  kube-apiserver.docker_tag  kube-controller-manager.docker_tag  kubelet     kube-proxy.tar         kube-scheduler.tar
    kube-aggregator          kube-apiserver.tar         kube-controller-manager.tar         kube-proxy  kube-scheduler         mounter

    #将可执行文件放到/usr/bin/

    #mv apiextensions-apiserver kubeadm kube-aggregator kube-apiserver kube-controller-manager kubectl kubelet kube-proxy kube-scheduler   /usr/bin/

    文件名说明
    kube-apiserverkube-apiserver 主程序
    kube-apiserver.docker_tagkube-apiserver docker 镜像的 tag
    kube-apiserver.tarkube-apiserver docker 镜像文件
    kube-controller-managerkube-controller-manager 主程序
    kube-controller-manager.docker_tagkube-controller-manager docker 镜像的 tag
    kube-controller-manager.tarkube-controller-manager docker 镜像文件
    kube-schedulerkube-scheduler 主程序
    kube-scheduler.docker_tagkube-scheduler docker 镜像的 tag
    kube-scheduler.tarkube-scheduler docker 镜像文件
    kubeletkubelet 主程序
    kube-proxykube-proxy 主程序
    kube-proxy.docker_tagkube-proxy docker 镜像的 tag
    kube-proxy.tarkube-proxy docker 镜像文件
    kubectl客户端命令行工具
    kubeadmKubernetes 集群安装的命令工具
    apiextensions-apiserver提供实现自定义资源对象的扩展 API Server
    kube-aggregator聚合 API Server 程序

    然后需要在/usr/lib/systemd/system/目录下为各个服务创建systemd服务配置文件,就完成了服务的安装。

    (2)部署kube-apiserver服务

    (2.1)设置kube-apiserver服务所需的ca证书。

     #mkdir k8s_ssl 

    #cd k8s_ssl/

    #vim master_ssl.cnf

    [req]
    req_extensions = v3_req
    distinguished_name = req_distinguished_name
    [req_distinguished_name]

    [ v3_req ]
    basicConstraints = CA:FALSE
    keyUsage = nonRepudiation,digitalSignature,keyEncipherment
    subjectAltName = @alt_names

    [alt_names]
    DNS.1 = kubernetes
    DNS.2 = kubernetes.default
    DNS.3 = kubernetes.default.svc
    DNS.4 = kubernetes.default.svc.cluster.local #上面4个都是虚拟服务名称
    DNS.5 = master01             ##主机名
    DNS.6 = master02             ##主机名
    IP.1 = 169.169.0.1              ##master service虚拟服务的clusterIP地址。
    IP.2 = 192.168.52.21          ##主机ip
    IP.3 = 192.168.52.22          ##主机ip
    IP.4 = 192.168.52.100        ##lvs用的vip

     创建证书

    #openssl genrsa -out apiserver.key 2048

    #openssl req -new -key apiserver.key -config master_ssl.cnf -subj "/CN=192.168.52.21" -out apiserver.csr

    #openssl x509 -req -in apiserver.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -days 36500 -extensions v3_req -extfile master_ssl.cnf -out apiserver.crt 
    #mv apiserver.crt apiserver.key  /etc/kubernetes/pki/

     (2.2)为kube-apiserver服务创建systemd服务

    配置文件/usr/lib/systemd/system/kube-apiserver.service 

    1. [Unit]
    2. Description=Kubernetes API Server
    3. Documentation=https://github.com/kubernetes/kubernetes
    4. [Service]
    5. EnvironmentFile=/etc/kubernetes/apiserver
    6. ExecStart=/usr/bin/kube-apiserver $KUBE_API_ARGS
    7. Restart=always
    8. [Install]
    9. WantedBy=multi-user.target

    配置文件 /etc/kubernetes/apiserver 的内容通过环境变量 KUBE_API_ARGS 设置 kube-apiserver 的全部启动参数。新版的参数可能不同。

    1. KUBE_API_ARGS="--secure-port=6443 \
    2. --tls-cert-file=/etc/kubernetes/pki/apiserver.crt \
    3. --tls-private-key-file=/etc/kubernetes/pki/apiserver.key \
    4. --client-ca-file=/etc/kubernetes/pki/ca.crt \
    5. --apiserver-count=1 \
    6. --endpoint-reconciler-type=master-count \
    7. --etcd-servers=https://192.168.52.21:2379,https://192.168.52.22:2379 \
    8. --etcd-cafile=/etc/kubernetes/pki/ca.crt \
    9. --etcd-certfile=/etc/etcd/pki/etcd_client.crt \
    10. --etcd-keyfile=/etc/etcd/pki/etcd_client.key \
    11. --service-cluster-ip-range=169.169.0.0/16 \
    12. --service-node-port-range=30000-32767 \
    13. --allow-privileged=true \
    14. --v=0"

    启动服务

    systemctl restart kube-apiserver && systemctl enable kube-apiserver

    systemctl status kube-apiserver

    很好没有报错直接成功了。 同样的配置把另外一台也配置上。

    (2.3)创建客户端证书

    kube-controller-manager、kube-scheduler、kublet和kube-proxy 都是apiserver的客户端,访问kube-apiserver的服务。用openssl创建证书并放到/etc/kubernetes/pki/ 创建好的证书考到同集群的其他服务器使用。

    1. openssl genrsa -out client.key 2048
    2. openssl req -new -key client.key -subj "/CN=admin" -out client.csr
    3. openssl x509 -req -in client.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -out client.crt -days 36500

    cp client.key client.crt /etc/kubernetes/pki/

    (2.4). 创建客户端连接 kube-apiserver 服务所需的 kubeconfig 配置文件。

    两台都要部署,为kube-controller-manager、kube-scheduler/kubelet、kube-proxy、kubectl统一使用的链接kube-api的配置文件。

    1. apiVersion: v1
    2. kind: Config
    3. clusters:
    4. - name: default
    5. cluster:
    6. server: https://192.168.52.100:9443
    7. certificate-authority: /etc/kubernetes/pki/ca.crt
    8. users:
    9. - name: admin
    10. user:
    11. client-certificate: /etc/kubernetes/pki/client.crt
    12. client-key: /etc/kubernetes/pki/client.key
    13. contexts:
    14. - context:
    15. cluster: default
    16. user: admin
    17. name: default
    18. current-context: default

     (2.5)部署kube-controller-manager服务

    两台都要部署,创建systemd的service文件,/usr/lib/systemd/system/kube-controller-manager.service

    1. [Unit]
    2. Description=Kubernetes Controller Manager
    3. Documentation=https://github.com/kubernetes/kubernetes
    4. [Service]
    5. EnvironmentFile=/etc/kubernetes/controller-manager
    6. ExecStart=/usr/bin/kube-controller-manager $KUBE_CONTROLLER_MANAGER_ARGS
    7. Restart=always
    8. [Install]
    9. WantedBy=multi-user.target

    配置文件 /etc/kubernetes/kube-controller-manager.service 的内容通过环境变量KUBE_CONTROLLER_MANAGER_ARGS设置的kube-controller-manager 的全部启动参数,包含CA安全配置的启动参数示例如下:

    1. KUBE_CONTROLLER_MANAGER_ARGS="--kubeconfig=/etc/kubernetes/kubeconfig \
    2. --leader-elect=false \
    3. --service-cluster-ip-range=169.169.0.0/16 \
    4. --service-account-private-key-file=/etc/kubernetes/pki/apiserver.key \
    5. --root-ca-file=/etc/kubernetes/pki/ca.crt \
    6. --v=0"

    systemd执行的时候其实是执行下面的命令。

    /usr/bin/kube-controller-manager --kubeconfig=/etc/kubernetes/kubeconfig --leader-elect=false --service-cluster-ip-range=169.169.0.0/16 --service-account-private-key-file=/etc/kubernetes/pki/apiserver.key --root-ca-file=/etc/kubernetes/pki/ca.crt --v=0 

     接下来启动服务即可

    systemctl restart kube-controller-manager

    systemctl enable kube-controller-manager

     (2.6)部署kube-scheduler服务

    两台都要部署,为kube-scheduler服务创建systemd服务配置文件//usr/lib/systemd/system/kube-scheduler.service

    1. [Unit]
    2. Description=Kubernetes Scheduler
    3. Documentation=https://github.com/kubernetes/kubernetes
    4. [Service]
    5. EnvironmentFile=/etc/kubernetes/scheduler
    6. ExecStart=/usr/bin/kube-scheduler $KUBE_SCHEDULER_ARGS
    7. Restart=always
    8. [Install]
    9. WantedBy=multi-user.target

    配置文件 /etc/kubernetes/scheduler通过环境变量$KUBE_SCHEDULER_ARGS 实现设置服务的全部参数。

    1. KUBE_SCHEDULER_ARGS="--kubeconfig=/etc/kubernetes/kubeconfig \
    2. --leader-elect=false \
    3. --v=0"

     (2.7). 使用 HAProxy 和 keepalived 部署高可用负载均衡器

    使用docker进行安装,docker的安装方法参考我之前的文章使用yum安装。

    Docker学习笔记1-在centos服务器上安装docker_温殿飞的博客-CSDN博客

     也可以使用二进制形式安装docker

     wget https://download.docker.com/linux/static/stable/x86_64/docker-18.03.1-ce.tgz
    tar -xf docker-18.03.1-ce.tgz

    cp docker/* /usr/bin/

    创建docker的systemd服务文件/usr/lib/systemd/system/docker.service

    1. [Unit]
    2. Description=Docker Application Container Engine
    3. Documentation=https://docs.docker.com
    4. After=network-online.target firewalld.service
    5. Wants=network-online.target
    6. [Service]
    7. Type=notify
    8. ExecStart=/usr/bin/dockerd
    9. ExecReload=/bin/kill -s HUP $MAINPID
    10. LimitNOFILE=infinity
    11. LimitNPROC=infinity
    12. TimeoutStartSec=0
    13. Delegate=yes
    14. KillMode=process
    15. Restart=on-failure
    16. StartLimitBurst=3
    17. StartLimitInterval=60s
    18. [Install]
    19. WantedBy=multi-user.target

    systemctl daemon-reload

    systemctl start docker

    systemctl enable docker

    接下来就是使用docker启动一个haproxy服务,创建haproxy配置文件/etc/kubernetes/haproxy.cfg 

    1. [root@master01 kubernetes]# cat haproxy.cfg
    2. global
    3. log 127.0.0.1 local2
    4. chroot /var/lib/haproxy
    5. pidfile /var/run/haproxy.pid
    6. maxconn 4096
    7. user haproxy
    8. group haproxy
    9. daemon
    10. stats socket /var/lib/haproxy/stats
    11. defaults
    12. mode http
    13. log global
    14. option httplog
    15. option dontlognull
    16. option http-server-close
    17. option forwardfor except 127.0.0.0/8
    18. option redispatch
    19. retries 3
    20. timeout http-request 10s
    21. timeout queue 1m
    22. timeout connect 10s
    23. timeout client 1m
    24. timeout server 1m
    25. timeout http-keep-alive 10s
    26. timeout check 10s
    27. maxconn 3000
    28. frontend kube-apiserver
    29. mode tcp
    30. bind *:9443
    31. option tcplog
    32. default_backend kube-apiserver
    33. listen stats
    34. mode http
    35. bind *:8888
    36. stats auth admin:password
    37. stats refresh 5s
    38. stats realm HAProxy\ Statistics
    39. stats uri /stats
    40. log 127.0.0.1 local3 err
    41. backend kube-apiserver
    42. mode tcp
    43. balance roundrobin
    44. server master01 192.168.52.21:6443 check
    45. server master02 192.168.52.22:6443 check

     然后执行命令启动容器,并将文件挂载到容器

     docker run -d --name k8s-haproxy --net=host --restart=always -v ${PWD}/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro haproxytech/haproxy-debian

     然后浏览器打开,输入用户admin 密码password 

    http://192.168.52.21:8888/stats

     另外一台也部署上hapeoxy服务。

    (2.8)部署lvs做vip的高可用,这里是实验都放在这两台服务器上了,生产环境可以分开设服务器。

    创建keepalive配置

    1. ! Configuration File for keepalived
    2. global_defs {
    3. router_id LVS_1
    4. }
    5. vrrp_script checkhaproxy
    6. {
    7. script "/usr/bin/check-haproxy.sh"
    8. interval 2
    9. weight -30
    10. }
    11. vrrp_instance VI_1 {
    12. state MASTER #主用master唯一 备用BACKUP可以有多个
    13. interface ens33 #注意这里是你的服务器网卡名
    14. virtual_router_id 51
    15. priority 100
    16. advert_int 1
    17. virtual_ipaddress {
    18. 192.168.52.100/24 dev ens33 ##vip
    19. }
    20. authentication {
    21. auth_type PASS
    22. auth_pass password
    23. }
    24. track_script {
    25. checkhaproxy
    26. }
    27. }

    在/usr/bin目录创建hapoxy端口检测脚本check-haproxy.sh,用于keepalived判断服务状态切换vip

    1. #!/bin/bash
    2. # Program:
    3. # check health
    4. # History:
    5. # 2022/01/14 wendianfei version:0.0.1
    6. path=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
    7. export path
    8. count=$(netstat -apn | grep 9443 | wc -l)
    9. if [ ${count} -gt 0 ]
    10. then
    11. exit 0
    12. else
    13. exit 1
    14. fi

    使用docker创建keepalived服务。 

    docker run -d --name k8s-keepalived --restart=always --net=host --cap-add=NET_ADMIN --cap-add=NET_BROADCAST --cap-add=NET_RAW -v ${PWD}/keepalived.conf:/container/service/keepalived/assets/keepalived.conf -v ${PWD}/check-haproxy.sh:/usr/bin/check-haproxy.sh osixia/keepalived:2.0.20 --copy-service

     使用docker ps 查看容器运行成功 

     ip -a 查看服务器网卡已经挂载vip

     浏览器访问能返回http页面证明keepalived+hapoxy组成的负载均衡系统部署完成,到这一步master就部署完了

    http://192.168.52.100:9443/

    http://192.168.52.100:8888/stats

  • 相关阅读:
    代数与逻辑:作业二 主成分分析法
    4、PHP的xml注入漏洞(xxe)
    【机器学习】交叉验证 Cross-validation
    学习 Java 的多线程开发
    【Azure 媒体服务】Media Service的编码示例 -- 创建缩略图子画面的.NET代码调试问题
    mysql数据库转PostgreSQL,批量处理xml中的sql,字段加上双引号脚本。
    【强化学习论文合集】AAMAS-2022 | 人工智能CCF-A类会议 (附链接)
    优秀测试成长之路
    《深入理解计算机系统》:Cache Lab
    万圣节习俗南瓜灯Jack-o’-lantern!
  • 原文地址:https://blog.csdn.net/qq_26711103/article/details/126639901