【云原生Kubernetes】二进制搭建Kubernetes集群(上)——部署etcd集群和单master(2)

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
日志服务 SLS,月写入数据量 50GB 1个月
简介: 本文将带大家一起通过二进制搭建Kubernetes v1.20,因为实验内容较多,故分成上、中、下三篇文章进行展示。

三、部署 Master 组件

master01:192.168.41.10

#在 master01 节点上操作,因为master01和etcd01部署在同一台机器上,所以/opt/k8s/目录已存在。
 #上传 master.zip 和 k8s-cert.sh 到 /opt/k8s 目录中,解压 master.zip 压缩包
 cd /opt/k8s/
 unzip master.zip
 chmod +x *.sh    #为所有脚本文件加上执行权限
 #创建kubernetes工作目录
 mkdir -p /opt/kubernetes/{bin,cfg,ssl,logs}
 #创建用于生成CA证书、相关组件的证书和私钥的目录
 mkdir /opt/k8s/k8s-cert/
 mv /opt/k8s/k8s-cert.sh /opt/k8s/k8s-cert/    #将k8s-cert.sh脚本移动到该目录
 cd /opt/k8s/k8s-cert/                         #切换到该目录
 ./k8s-cert.sh   #运行脚本,生成CA证书、相关组件的证书和私钥
 #查看生成的证书文件
 ls *pem
 admin-key.pem  apiserver-key.pem  ca-key.pem  kube-proxy-key.pem  
 admin.pem      apiserver.pem      ca.pem      kube-proxy.pem
 #复制CA证书、apiserver相关证书和私钥到kubernetes工作目录的ssl子目录中
 cp ca*pem apiserver*pem /opt/kubernetes/ssl/
 #上传 kubernetes-server-linux-amd64.tar.gz 到 /opt/k8s/ 目录中,解压 kubernetes 压缩包。
 #下载地址: https://github.com/kubernetes/kubernetes/blob/release-1.20/CHANGELOG/CHANGELOG-1.20.nd
 #注:打开链接你会发现里面有很多包,下载一个server包就够了,包含了Master和Worker Node二进制文件。
 cd /opt/k8s/
 tar zxvf kubernetes-server-linux-amd64.tar.gz
 #复制master组件的关键命令文件到kubernetes工作目录的bin子目录中
 cd /opt/k8s/kubernetes/server/bin
 cp kube-apiserver kubectl kube-controller-manager kube-scheduler /opt/kubernetes/bin/
 ln -s /opt/kubernetes/bin/* /usr/local/bin/  #创建软链接,方便系统识别命令
 #创建 bootstrap token 认证文件,apiserver 启动时会调用,然后就相当于在集群内创建了一个这个用户,接下来就可以用 RBAC 给他授权
 cd /opt/k8s/
 vim token.sh
 #!/bin/bash
 #获取随机数前16个字节内容,以十六进制格式输出,并删除其中空格
 BOOTSTRAP_TOKEN=$(head -c 16 /dev/urandom | od -An -t x | tr -d ' ')
 #生成 token.csv 文件,按照 Token序列号,用户名,UID,用户组 的格式生成
 cat > /opt/kubernetes/cfg/token.csv <<EOF
 ${BOOTSTRAP_TOKEN},kubelet-bootstrap,10001,"system:kubelet-bootstrap"
 EOF
 chmod +x token.sh    #为脚本增加执行权限
 ./token.sh           #运行脚本     
 cat /opt/kubernetes/cfg/token.csv
 #二进制文件、token、证书都准备好后,开启apiserver服务,和etcd进行对接。
 cd /opt/k8s/
 #脚本后面跟master01的IP,以及etcd集群的地址和端口
 ./apiserver.sh 192.168.41.10 https://192.168.41.10:2379,https://192.168.41.42:2379,https://192.168.41.43:2379
 #检查进程是否启动成功
 ps aux | grep kube-apiserver
 netstat -natp | grep 6443   #安全端口6443用于接收HTTPS请求,用于基于Token文件或客户端证书等认证
 #启动 scheduler 服务
 ./scheduler.sh
 ps aux | grep kube-scheduler
 #启动 controller-manager 服务
 ./controller-manager.sh
 ps aux | grep kube-controller-manager
 #生成kubectl连接集群的kubeconfig文件,即令kubectl对接apiserver
 ./admin.sh
 #绑定默认cluster-admin管理员集群角色,授权kubectl访问集群
 kubectl create clusterrolebinding cluster-system-anonymous --clusterrole=cluster-admin --user=system:anonymous
 #通过kubectl工具查看当前集群组件状态
 kubectl get cs
 NAME                 STATUS    MESSAGE             ERROR
 controller-manager   Healthy   ok                  
 scheduler            Healthy   ok                  
 etcd-2               Healthy   {"health":"true"}   
 etcd-1               Healthy   {"health":"true"}   
 etcd-0               Healthy   {"health":"true"}  
 #查看版本信息
 kubectl version
复制代码


网络异常,图片无法展示
|


网络异常,图片无法展示
|


修改k8s-cert.sh脚本,之后运行脚本,生成CA证书、相关组件的证书和私钥:

网络异常,图片无法展示
|


网络异常,图片无法展示
|


网络异常,图片无法展示
|


网络异常,图片无法展示
|


网络异常,图片无法展示
|


网络异常,图片无法展示
|


网络异常,图片无法展示
|


修改apiserver.sh脚本,之后执行脚本开启apiserver服务:

网络异常,图片无法展示
|


网络异常,图片无法展示
|


网络异常,图片无法展示
|


修改scheduler.sh脚本,之后执行脚本开启scheduler服务:

网络异常,图片无法展示
|


网络异常,图片无法展示
|


修改controller-manager.sh脚本,之后执行脚本开启controller-manager服务:

网络异常,图片无法展示
|


网络异常,图片无法展示
|


修改admin.sh脚本,之后执行脚本,使kubectl对接apiserver:

网络异常,图片无法展示
|


网络异常,图片无法展示
|


网络异常,图片无法展示
|


附录1:k8s-cert.sh脚本

#!/bin/bash
 #配置证书生成策略,让 CA 软件知道颁发有什么功能的证书,生成用来签发其他组件证书的根证书
 cat > ca-config.json <<EOF
 {
   "signing": {
     "default": {
       "expiry": "87600h"
     },
     "profiles": {
       "kubernetes": {
          "expiry": "87600h",
          "usages": [
             "signing",
             "key encipherment",
             "server auth",
             "client auth"
         ]
       }
     }
   }
 }
 EOF
 #生成CA证书和私钥(根证书和私钥)
 cat > ca-csr.json <<EOF
 {
     "CN": "kubernetes",
     "key": {
         "algo": "rsa",
         "size": 2048
     },
     "names": [
         {
             "C": "CN",
             "L": "Beijing",
             "ST": "Beijing",
             "O": "k8s",
             "OU": "System"
         }
     ]
 }
 EOF
 cfssl gencert -initca ca-csr.json | cfssljson -bare ca -
 #-----------------------
 #生成 apiserver 的证书和私钥(apiserver和其它k8s组件通信使用)
 #hosts中将所有可能作为 apiserver 的 ip 添加进去,后面 keepalived 使用的VIP 也要加入
 cat > apiserver-csr.json <<EOF
 {
     "CN": "kubernetes",
     "hosts": [
       "10.0.0.1",
       "127.0.0.1",
       "192.168.41.10",    #master01。使用脚本时,要将这5行注释删除
       "192.168.41.20",    #master02
       "192.168.41.100",   #vip,后面keepalived要用到
       "192.168.41.44",    #负载均衡器01(master)
       "192.168.41.45",    #负载均衡器02(backup)
       "kubernetes",
       "kubernetes.default",
       "kubernetes.default.svc",
       "kubernetes.default.svc.cluster",
       "kubernetes.default.svc.cluster.local"
     ],
     "key": {
         "algo": "rsa",
         "size": 2048
     },
     "key": {
         "algo": "rsa",
         "size": 2048
     },
     "names": [
         {
             "C": "CN",
             "L": "BeiJing",
             "ST": "BeiJing",
             "O": "k8s",
             "OU": "System"
         }
     ]
 }
 EOF
 cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes apiserver-csr.json | cfssljson -bare apiserver
 #-----------------------
 #生成 kubectl 连接集群的证书和私钥,具有admin权限
 cat > admin-csr.json <<EOF
 {
   "CN": "admin",
   "hosts": [],
   "key": {
     "algo": "rsa",
     "size": 2048
   },
   "names": [
     {
       "C": "CN",
       "L": "BeiJing",
       "ST": "BeiJing",
       "O": "system:masters",
       "OU": "System"
     }
   ]
 }
 EOF
 cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes admin-csr.json | cfssljson -bare admin
 #-----------------------
 #生成 kube-proxy 的证书和私钥
 cat > kube-proxy-csr.json <<EOF
 {
   "CN": "system:kube-proxy",
   "hosts": [],
   "key": {
     "algo": "rsa",
     "size": 2048
   },
   "names": [
     {
       "C": "CN",
       "L": "BeiJing",
       "ST": "BeiJing",
       "O": "k8s",
       "OU": "System"
     }
   ]
 }
 EOF
 cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes kube-proxy-csr.json | cfssljson -bare kube-proxy
复制代码


附录2:apiserver.sh

#!/bin/bash
 #example: apiserver.sh 192.168.41.10 https://192.168.41.10:2379,https://192.168.41.42:2379,https://192.168.41.43:2379
 #创建 kube-apiserver 启动参数配置文件
 MASTER_ADDRESS=$1
 ETCD_SERVERS=$2
 cat >/opt/kubernetes/cfg/kube-apiserver <<EOF
 KUBE_APISERVER_OPTS="--logtostderr=false  \
 --v=2 \
 --log-dir=/opt/kubernetes/logs \
 --etcd-servers=${ETCD_SERVERS} \
 --bind-address=${MASTER_ADDRESS} \
 --secure-port=6443 \
 --advertise-address=${MASTER_ADDRESS} \
 --allow-privileged=true \
 --service-cluster-ip-range=10.0.0.0/24 \
 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,ResourceQuota,NodeRestriction \
 --authorization-mode=RBAC,Node \
 --enable-bootstrap-token-auth=true \
 --token-auth-file=/opt/kubernetes/cfg/token.csv \
 --service-node-port-range=30000-50000 \
 --kubelet-client-certificate=/opt/kubernetes/ssl/apiserver.pem \
 --kubelet-client-key=/opt/kubernetes/ssl/apiserver-key.pem \
 --tls-cert-file=/opt/kubernetes/ssl/apiserver.pem  \
 --tls-private-key-file=/opt/kubernetes/ssl/apiserver-key.pem \
 --client-ca-file=/opt/kubernetes/ssl/ca.pem \
 --service-account-key-file=/opt/kubernetes/ssl/ca-key.pem \
 --service-account-issuer=api \
 --service-account-signing-key-file=/opt/kubernetes/ssl/apiserver-key.pem \
 --etcd-cafile=/opt/k8s/etcd-cert/ca.pem \
 --etcd-certfile=/opt/k8s/etcd-cert/server.pem \
 --etcd-keyfile=/opt/k8s/etcd-cert/server-key.pem \
 --requestheader-client-ca-file=/opt/kubernetes/ssl/ca.pem \
 --proxy-client-cert-file=/opt/kubernetes/ssl/apiserver.pem \
 --proxy-client-key-file=/opt/kubernetes/ssl/apiserver-key.pem \
 --requestheader-allowed-names=kubernetes \
 --requestheader-extra-headers-prefix=X-Remote-Extra- \
 --requestheader-group-headers=X-Remote-Group \
 --requestheader-username-headers=X-Remote-User \
 --enable-aggregator-routing=true \
 --audit-log-maxage=30 \
 --audit-log-maxbackup=3 \
 --audit-log-maxsize=100 \
 --audit-log-path=/opt/kubernetes/logs/k8s-audit.log"
 EOF
 #--logtostderr=true:启用日志。输出日志到标准错误控制台,不输出到文件
 #--v=4:日志等级。指定输出日志的级别,v=4为调试级别详细输出
 #--etcd-servers:etcd集群地址。指定etcd服务器列表(格式://ip:port),逗号分隔
 #--bind-address:监听地址。指定 HTTPS 安全接口的监听地址,默认值0.0.0.0
 #--secure-port:https安全端口。指定 HTTPS 安全接口的监听端口,默认值6443
 #--advertise-address:集群通告地址。通过该 ip 地址向集群其他节点公布 api server 的信息,必须能够被其他节点访问
 #--allow-privileged=true:启用授权。允许拥有系统特权的容器运行,默认值false
 #--service-cluster-ip-range:Service虚拟IP地址段。指定 Service Cluster IP 地址段
 #--enable-admission-plugins:准入控制模块。kuberneres集群的准入控制机制,各控制模块以>插件的形式依次生效,集群时必须包含ServiceAccount,运行在认证(Authentication)、授权(Authorization)之后,Admission Control是权限认证链上的最后一环, 对请求API资源对象进行修改和校验
 #--authorization-mode:认证授权,启用RBAC授权和节点自管理。在安全端口使用RBAC,Node授权模式,未通过授权的请求拒绝,默认值AlwaysAllow。RBAC是用户通过角色与权限进行关联的模式>;Node模式(节点授权)是一种特殊用途的授权模式,专门授权由kubelet发出的API请求,在进行认证时,先通过用户名、用户分组验证是否是集群中的Node节点,只有是Node节点的请求才能使用Node模式授权
 #--enable-bootstrap-token-auth:启用TLS bootstrap机制。在apiserver上启用Bootstrap Token 认证
 #--token-auth-file=/opt/kubernetes/cfg/token.csv:指定bootstrap token认证文件路径
 #--service-node-port-range:指定 Service  NodePort 的端口范围,默认值30000-32767
 #–-kubelet-client-xxx:apiserver访问kubelet客户端证书
 #--tls-xxx-file:apiserver https证书
 #1.20版本必须加的参数:–-service-account-issuer,–-service-account-signing-key-file
 #--etcd-xxxfile:连接Etcd集群证书
 #–-audit-log-xxx:审计日志
 #启动聚合层相关配置:–requestheader-client-ca-file,–proxy-client-cert-file,–proxy-client-key-file,–requestheader-allowed-names,–requestheader-extra-headers-prefix,–requestheader-group-headers,–requestheader-username-headers,–enable-aggregator-routing
 #创建 kube-apiserver.service 服务管理文件
 cat >/usr/lib/systemd/system/kube-apiserver.service <<EOF
 [Unit]
 Description=Kubernetes API Server
 Documentation=https://github.com/kubernetes/kubernetes
 [Service]
 EnvironmentFile=-/opt/kubernetes/cfg/kube-apiserver
 ExecStart=/opt/kubernetes/bin/kube-apiserver $KUBE_APISERVER_OPTS
 Restart=on-failure
 [Install]
 WantedBy=multi-user.target
 EOF
 systemctl daemon-reload
 systemctl enable kube-apiserver
 systemctl restart kube-apiserver
复制代码


附录3:scheduler.sh

#!/bin/bash
 ##创建 kube-scheduler 启动参数配置文件
 MASTER_ADDRESS=$1
 cat >/opt/kubernetes/cfg/kube-scheduler <<EOF
 KUBE_SCHEDULER_OPTS="--logtostderr=false \
 --v=2 \
 --log-dir=/opt/kubernetes/logs \
 --leader-elect=true \
 --kubeconfig=/opt/kubernetes/cfg/kube-scheduler.kubeconfig \
 --bind-address=127.0.0.1"
 EOF
 #-–kubeconfig:连接 apiserver 用的配置文件,用于识别 k8s 集群
 #--leader-elect=true:当该组件启动多个时,自动启动 leader 选举
 #k8s中Controller-Manager和Scheduler的选主逻辑:k8s中的etcd是整个集群所有状态信>息的存储,涉及数据的读写和多个etcd之间数据的同步,对数据的一致性要求严格,所以>使用较复杂的 raft 算法来选择用于提交数据的主节点。而 apiserver 作为集群入口,本身是无状态的web服务器,多个 apiserver 服务之间直接负载请求并不需要做选主。Controller-Manager 和 Scheduler 作为任务类型的组件,比如 controller-manager 内置的 k8s 各种资源对象的控制器实时的 watch apiserver 获取对象最新的变化事件做期望状态>和实际状态调整,调度器watch未绑定节点的pod做节点选择,显然多个这些任务同时工作>是完全没有必要的,所以 controller-manager 和 scheduler 也是需要选主的,但是选主逻辑和 etcd 不一样的,这里只需要保证从多个 controller-manager 和 scheduler 之间选出一个 leader 进入工作状态即可,而无需考虑它们之间的数据一致和同步。
 ##生成kube-scheduler证书
 cd /opt/k8s/k8s-cert/
 #创建证书请求文件
 cat > kube-scheduler-csr.json << EOF
 {
   "CN": "system:kube-scheduler",
   "hosts": [],
   "key": {
     "algo": "rsa",
     "size": 2048
   },
   "names": [
     {
       "C": "CN",
       "L": "BeiJing",
       "ST": "BeiJing",
       "O": "system:masters",
       "OU": "System"
     }
   ]
 }
 EOF
 #生成证书
 cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes kube-scheduler-csr.json | cfssljson -bare kube-scheduler
 #生成kubeconfig文件
 KUBE_CONFIG="/opt/kubernetes/cfg/kube-scheduler.kubeconfig"
 KUBE_APISERVER="https://192.168.41.10:6443"   #master01的IP
 kubectl config set-cluster kubernetes \
   --certificate-authority=/opt/kubernetes/ssl/ca.pem \
   --embed-certs=true \
   --server=${KUBE_APISERVER} \
   --kubeconfig=${KUBE_CONFIG}
 kubectl config set-credentials kube-scheduler \
   --client-certificate=./kube-scheduler.pem \
   --client-key=./kube-scheduler-key.pem \
   --embed-certs=true \
   --kubeconfig=${KUBE_CONFIG}
 kubectl config set-context default \
   --cluster=kubernetes \
   --user=kube-scheduler \
   --kubeconfig=${KUBE_CONFIG}
 kubectl config use-context default --kubeconfig=${KUBE_CONFIG}
 ##创建 kube-scheduler.service 服务管理文件
 cat >/usr/lib/systemd/system/kube-scheduler.service <<EOF
 [Unit]
 Description=Kubernetes Scheduler
 Documentation=https://github.com/kubernetes/kubernetes
 [Service]
 EnvironmentFile=-/opt/kubernetes/cfg/kube-scheduler
 ExecStart=/opt/kubernetes/bin/kube-scheduler $KUBE_SCHEDULER_OPTS
 Restart=on-failure
 [Install]
 WantedBy=multi-user.target
 EOF
 systemctl daemon-reload
 systemctl enable kube-scheduler
 systemctl restart kube-scheduler
复制代码


附录4:controller-manager.sh

#!/bin/bash
 ##创建 kube-controller-manager 启动参数配置文件
 MASTER_ADDRESS=$1
 cat >/opt/kubernetes/cfg/kube-controller-manager <<EOF
 KUBE_CONTROLLER_MANAGER_OPTS="--logtostderr=false \
 --v=2 \
 --log-dir=/opt/kubernetes/logs \
 --leader-elect=true \
 --kubeconfig=/opt/kubernetes/cfg/kube-controller-manager.kubeconfig \
 --bind-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=/opt/kubernetes/ssl/ca.pem \
 --cluster-signing-key-file=/opt/kubernetes/ssl/ca-key.pem  \
 --root-ca-file=/opt/kubernetes/ssl/ca.pem \
 --service-account-private-key-file=/opt/kubernetes/ssl/ca-key.pem \
 --cluster-signing-duration=87600h0m0s"
 EOF
 #––leader-elect:当该组件启动多个时,自动选举(HA)
 #-–kubeconfig:连接 apiserver 用的配置文件,用于识别 k8s 集群
 #--cluster-cidr=10.244.0.0/16:pod资源的网段,需与pod网络插件的值设置一致。通常,Flannel网络插件的默认为10.244.0.0/16,Calico插件的默认值为192.168.0.0/16
 #--cluster-signing-cert-file/–-cluster-signing-key-file:自动为kubelet颁发证书>的CA,与apiserver保持一致。指定签名的CA机构根证书,用来签名为 TLS BootStrapping 创建的证书和私钥
 #--root-ca-file:指定根CA证书文件路径,用来对 kube-apiserver 证书进行校验,指定该参数后,才会在 Pod 容器的 ServiceAccount 中放置该 CA 证书文件
 #--experimental-cluster-signing-duration:设置为 TLS BootStrapping 签署的证书有效时间为10年,默认为1年
 ##生成kube-controller-manager证书
 cd /opt/k8s/k8s-cert/
 #创建证书请求文件
 cat > kube-controller-manager-csr.json << EOF
 {
   "CN": "system:kube-controller-manager",
   "hosts": [],
   "key": {
     "algo": "rsa",
     "size": 2048
   },
   "names": [
     {
       "C": "CN",
       "L": "BeiJing",
       "ST": "BeiJing",
       "O": "system:masters",
       "OU": "System"
     }
   ]
 }
 EOF
 #生成证书
 cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes kube-controller-manager-csr.json | cfssljson -bare kube-controller-manager
 #生成kubeconfig文件
 KUBE_CONFIG="/opt/kubernetes/cfg/kube-controller-manager.kubeconfig"
 KUBE_APISERVER="https://192.168.41.10:6443"   #master01的IP
 kubectl config set-cluster kubernetes \
   --certificate-authority=/opt/kubernetes/ssl/ca.pem \
   --embed-certs=true \
   --server=${KUBE_APISERVER} \
   --kubeconfig=${KUBE_CONFIG}
 kubectl config set-credentials kube-controller-manager \
   --client-certificate=./kube-controller-manager.pem \
   --client-key=./kube-controller-manager-key.pem \
   --embed-certs=true \
   --kubeconfig=${KUBE_CONFIG}
 kubectl config set-context default \
   --cluster=kubernetes \
   --user=kube-controller-manager \
   --kubeconfig=${KUBE_CONFIG}
 kubectl config use-context default --kubeconfig=${KUBE_CONFIG}
 ##创建 kube-controller-manager.service 服务管理文件
 cat >/usr/lib/systemd/system/kube-controller-manager.service <<EOF
 [Unit]
 Description=Kubernetes Controller Manager
 Documentation=https://github.com/kubernetes/kubernetes
 [Service]
 EnvironmentFile=-/opt/kubernetes/cfg/kube-controller-manager
 ExecStart=/opt/kubernetes/bin/kube-controller-manager $KUBE_CONTROLLER_MANAGER_OPTS
 Restart=on-failure
 [Install]
 WantedBy=multi-user.target
 EOF
 systemctl daemon-reload
 systemctl enable kube-controller-manager
 systemctl restart kube-controller-manager
复制代码


附录5:admin.sh

#!/bin/bash
 mkdir /root/.kube
 KUBE_CONFIG="/root/.kube/config"
 KUBE_APISERVER="https://192.168.41.10:6443"   #master01的IP
 cd /opt/k8s/k8s-cert/
 kubectl config set-cluster kubernetes \
   --certificate-authority=/opt/kubernetes/ssl/ca.pem \
   --embed-certs=true \
   --server=${KUBE_APISERVER} \
   --kubeconfig=${KUBE_CONFIG}
 kubectl config set-credentials cluster-admin \
   --client-certificate=./admin.pem \
   --client-key=./admin-key.pem \
   --embed-certs=true \
   --kubeconfig=${KUBE_CONFIG}
 kubectl config set-context default \
   --cluster=kubernetes \
   --user=cluster-admin \
   --kubeconfig=${KUBE_CONFIG}
 kubectl config use-context default --kubeconfig=${KUBE_CONFIG}
复制代码


总结:


etcd数据库:

  • 分布式键值对型的数据库,服务发现系统(之前的docker-consul 就是服务发现)
  • go语言开发的,使用raft-a致性算法
  • 部署集群时需要3台或以上的奇数台
  • 2379 对外(客户端)通信的端口
  • 2380 对内(集群内部节点间)通信的端口

etcd安装步骤:

  1. 使用CFSSL工具,生成ca证书和私钥文件,再使用ca签发服务端证书和私钥文件
  2. 使用ca证书、服务端证书和私钥文件加上etcd集群配置文件,去启动etcd服务
  3. 解压etcd软件包
  4. 复制etcd工作目录和服务管理文件到另外几个节点上,修改etcd集群配置文件并启动etcd服务
  5. 使用v3版本的接口执行etcdctl +证书选项+ (endpoint health | endpoint status | member list) 查看etcd 集群和节点状态

正常情况etcd应该生成三套证书:客户端证书,服务端证书,对等体证书(内部)。初学者可以先只生成两套。

master组件安装步骤:

1.先安装apiserver

  • 准备组件的相关证书和私钥文件
  • 准备bootstraptoken认证文件(给kubelet启动时签发证书时使用)
  • 准备组件的启动配置文件
  • 启动apiserver 服务、端口号、6443、https

2.再启动controller-manager 和scheduler

  • 准备启动配置文件
  • 准备证书和私钥文件生成kubeconfig 文件(用于指定对接哪个apiserver,使用什么证书认证)
  • 启动服务

3.检查集群组件状态

  • 需要准备kubeconfig 文件,把kubectl 加入到集群中( 指定对接哪个apiserver,使用什么证书认证)
  • kubectl get cs
相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
7天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
30 2
|
7天前
|
Kubernetes 监控 负载均衡
深入云原生:Kubernetes 集群部署与管理实践
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术以其弹性、可扩展性成为企业IT架构的首选。本文将引导你了解如何部署和管理一个Kubernetes集群,包括环境准备、安装步骤和日常维护技巧。我们将通过实际代码示例,探索云原生世界的秘密,并分享如何高效运用这一技术以适应快速变化的业务需求。
28 1
|
11天前
|
运维 Kubernetes Cloud Native
Kubernetes云原生架构深度解析与实践指南####
本文深入探讨了Kubernetes作为领先的云原生应用编排平台,其设计理念、核心组件及高级特性。通过剖析Kubernetes的工作原理,结合具体案例分析,为读者呈现如何在实际项目中高效部署、管理和扩展容器化应用的策略与技巧。文章还涵盖了服务发现、负载均衡、配置管理、自动化伸缩等关键议题,旨在帮助开发者和运维人员掌握利用Kubernetes构建健壮、可伸缩的云原生生态系统的能力。 ####
|
12天前
|
存储 运维 Kubernetes
云原生之旅:Kubernetes的弹性与可扩展性探索
【10月更文挑战第32天】在云计算的浪潮中,云原生技术以其独特的魅力成为开发者的新宠。本文将深入探讨Kubernetes如何通过其弹性和可扩展性,助力应用在复杂环境中稳健运行。我们将从基础架构出发,逐步揭示Kubernetes集群管理、服务发现、存储机制及自动扩缩容等核心功能,旨在为读者呈现一个全景式的云原生平台视图。
26 1
|
17天前
|
Kubernetes 负载均衡 Cloud Native
云原生应用:Kubernetes在容器编排中的实践与挑战
【10月更文挑战第27天】Kubernetes(简称K8s)是云原生应用的核心容器编排平台,提供自动化、扩展和管理容器化应用的能力。本文介绍Kubernetes的基本概念、安装配置、核心组件(如Pod和Deployment)、服务发现与负载均衡、网络配置及安全性挑战,帮助读者理解和实践Kubernetes在容器编排中的应用。
47 4
|
18天前
|
Kubernetes 监控 Cloud Native
云原生应用:Kubernetes在容器编排中的实践与挑战
【10月更文挑战第26天】随着云计算技术的发展,容器化成为现代应用部署的核心趋势。Kubernetes(K8s)作为容器编排领域的佼佼者,以其强大的可扩展性和自动化能力,为开发者提供了高效管理和部署容器化应用的平台。本文将详细介绍Kubernetes的基本概念、核心组件、实践过程及面临的挑战,帮助读者更好地理解和应用这一技术。
53 3
|
24天前
|
JSON Kubernetes 容灾
ACK One应用分发上线:高效管理多集群应用
ACK One应用分发上线,主要介绍了新能力的使用场景
|
22天前
|
Kubernetes Cloud Native 开发者
云原生技术入门:Kubernetes和Docker的协作之旅
【10月更文挑战第22天】在数字化转型的浪潮中,云原生技术成为推动企业创新的重要力量。本文旨在通过浅显易懂的语言,引领读者步入云原生的世界,着重介绍Kubernetes和Docker如何携手打造弹性、可扩展的云环境。我们将从基础概念入手,逐步深入到它们在实际场景中的应用,以及如何简化部署和管理过程。文章不仅为初学者提供入门指南,还为有一定基础的开发者提供实践参考,共同探索云原生技术的无限可能。
33 3
|
21天前
|
运维 Kubernetes Cloud Native
云原生入门:Kubernetes和容器化的未来
【10月更文挑战第23天】本文将带你走进云原生的世界,探索Kubernetes如何成为现代软件部署的心脏。我们将一起揭开容器化技术的神秘面纱,了解它如何改变软件开发和运维的方式。通过实际的代码示例,你将看到理论与实践的结合,感受到云原生技术带来的革命性影响。无论你是初学者还是有经验的开发者,这篇文章都将为你开启一段新的旅程。让我们一起踏上这段探索之旅,解锁云原生技术的力量吧!
|
2月前
|
存储 Kubernetes 负载均衡
CentOS 7.9二进制部署K8S 1.28.3+集群实战
本文详细介绍了在CentOS 7.9上通过二进制方式部署Kubernetes 1.28.3+集群的全过程,包括环境准备、组件安装、证书生成、高可用配置以及网络插件部署等关键步骤。
411 3
CentOS 7.9二进制部署K8S 1.28.3+集群实战