K8S 二进制单节点安装部署详解(2)

K8S 二进制单节点安装部署详解(2)

https://www.cnblogs.com/yhtweirdo/p/15470694.html 部署详解(1)

一、部署 Master 组件

######## 在Master01 节点上操作 ############

1、上传master.zip 和 k8s-cer.sh到 /opt/k8s 目录中,并解压

cd /opt/k8s
unzip master.zip
apiserver.sh
scheduler.sh
controller-manager.sh

chmod +x *.sh

 2、创建Kubernetes 工作目录

mkdir -p /opt/kubernetes/{cfg,bin,ssl}

3、创建用于生成ca证书、相关组件的证书和私钥的目录

mkdir /opt/k8s/k8s-cert
mv /opt/k8s/k8s-cert.sh /opt/k8s/k8s-cert
cd /opt/k8s/k8s-cert/

注:执行脚本之前注意修改 hosts地址,规划好将后续需要的负载均衡等服务器IP均提前添加 ./k8s-cert.sh # 生成ca证书、相关组件的证书和私钥 ls *pem //controller-manager 和 bube-scheduler 设定值为值调用当前机器的apiserver,使用127.0.0.1:8080 通信,因此不需要签发证书 复制ca证书、apiserver相关证书和私钥到 kubernetes 工作目录中的 ssl 子目录中 cp ca*pem apiserver*pem /opt/kubernetes/ssl

 4、上传 kubernetes-server-linux-amd64.tar.gz 到/opt/k8s/ 目录中,并解压

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

 5、创建 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

6、开启apiserver 服务

//二进制文件、token、证书都准备好后,开启 apiserver 服务
cd /opt/k8s/
./apiserver.sh 192.168.70.10 https://192.168.70.10:2379,https://192.168.70.15:2379,https://192.168.70.20:2379
//检查进程是否启动成功
ps aux | grep kube-apiserver

#k8s些通过kube一apiserver这个进程提供服务,该讲程运行在单个master节点上。默认有两个口6443和8080
#安全端口6443用于接收HTTPs请求,用于基于Token文件或客户端证书等认证
netstat -natp | grep 6443
#本地端口8080用于接收HTTP请求, 非认证或授权的HrFP请求通过该端口访问APT Server
netstat -natp | grep 8080  v1.20版本使用 58080 作本地端口
#查看版本信息(必须保证apiserver启动正∶常,不然无法查询到3erver的版本信息)
kubectl version

 7、启动 scheduler服务和controller-manager服务

cd /opt/k8s/
./scheduler.sh 127.0.0.1
ps aux | grep kube-scheduler

cd /opt/k8s/
./controller-manager.sh 127.0.0.1

 8、查看master节点状态

kubectl get componentstatuses
或者
kubectl get cs

 二、部署Worker Node组件

1、把kubelet、kube-proxy拷贝到node节点(在master01节点操作)

cd /opt/k8s/kubernetes/server/bin
scp kubelet kube-proxy root@192.168.70.15:/opt/kubernetes/bin/
scp kubelet kube-proxy root@192.168.70.20:/opt/kubernetes/bin/

2、在node节点上操作:上传node.zip 到/opt 目录中

cd /opt/ 
unzip node.zip      #node.zip压缩包为自己编写的shell脚本,为便利使用故此压缩
chmod +x *.sh      #授权

 3、在master01 节点上操作

(1)创建用于生成kubelet的配置文件的目录

mkdir /opt/k8s/kubeconfig

(2)上传 kubeconfig.sh 文件到/opt/k8s/kubeconfig 目录中

  • kubeconfig.sh文件包含集群参数(CA 证书、API Server 地址),客户端参数(上面生成的证书和私钥),集群context上下文参数(集群名称、用户名)。Kubenetes 组件(如kubelet、 kube-proxy) 通过启动时指定不同的kubeconfig文件可以切换到不同的集群,连接到apiserver
cd /opt/k8s/kubeconfig
chmod +x kubeconfig.sh

(3)生成kubelet的配置文件

cd /opt/k8s/kubeconfig
./kubeconfig.sh 192.168.70.10 /opt/k8s/k8s-cert/
ls

(4)配置文件bootstrap.kubeconfig、kube-proxy.kubeconfig拷贝到node节点

cd /opt/k8s/kubeconfig

scp bootstrap.kubeconfig kube-proxy.kubeconfig root@192.168.70.15:/opt/kubernetes/cfg/
scp bootstrap.kubeconfig kube-proxy.kubeconfig root@192.168.70.20:/opt/kubernetes/cfg/

(5)RBAC授权及相关说明

  • 将预设用户kubelet-bootstrap与内置的ClusterRole system:node-bootstrapper绑定到一起,使其能够发起CSR请求
kubectl create clusterrolebinding kubelet-bootstrap --clusterrole=system:node-bootstrapper --user=kubelet-bootstrap

  • kubelet采用TLS Bootstrapping机制,自动完成到kube-apiserver的注册,在node节点量较大或者后期自动扩容时非常有用。
  • Master apiserver启用TLS认证后,node节点kubelet组件想要加入集群,必须使用CA签发的有效证书才能与apiserver通信,当node节点很多时,前述证书是一件很繁琐的事情。因此Kubernetes引入了TLS bootstrapping机制来兹自动颁发客户端证书,kubelet会以一个低权限用户自动向apiserver申请证书,kubelet的证书由apiserver动态签署。
  • kubelet首次启动通过加载bootstrap.kubeconfig中的用户Token和apiserver CA证书发起首次CSR请求,这个Token被预先内置在apiserver节点的token.csv中,其身份为kubelet=bootstrap用户和system:kubelet=bootstrap用户组;想要首次CSR请求能成功(即不会被apiserver 401拒绝),则需要先创建一个ClusterRoleBinding,将kubelet-bootstrap用户和system:node-bootstrapper内置ClusterRole绑定(通过kubectl get clusterroles可查询),使其能够发起CSR认证请求。
  • TLS bootstrapping时的证书实际是由kube-controller-manager组件来签署的,也就是说证书有效期是kube-controller-manager组件控制的;kube-controller-manager组件提供一个--experimental-cluster-signing-duration参数来设置签署的证书有效时间:默认为8760h0m0s,将其改为87600h0m0s,即10年后再进行TLS bootstrapping签署证书即可。
  • 也就是说kubelet首次访问API Server时,是使用token做认证,通过后,Controller Manager会为kubelet生成一个证书,以后的访问都是用证书做认证了。

(6)查看角色

kubectl get clusterroles | grep system:node-bootstrapper

 (7)查看已授权角色

kubectl get clusterrolebinding

 4、在node1节点上操作

(1)使用kubelet.sh脚本 启动kubelet服务

cd /opt
chmod +x kubelet.sh
./kubelet.sh 192.168.70.15

(2)检查kubelet 服务启动

ps aux | grep kubelet

(3)查看当前 ssl 目录

ls /opt/kubernetes/ssl/

注:此时还没有生成证书,因为master还未对该审批做批准操作

5、在master01 节点上操作

//检查到node1 节点的kubelet 发起的CSR请求,Pending 表示等待集群给该节点签发证书.
kubectl get csr
NAME               AGE           REQUESTOR       CONDITION

//通过CSR请求
kubectl certificate approve node-csr-NOI-9vufTLIqJgMWq4fHPNPHKbjCX1DGHptj7FqTa8A

//再次查看CSR请求状态,Approved, Issued表示已授权CSR请求并签发证书
kubectl get csr

//查看群集节点状态,成功加入node1节点
kubectl get nodes

 6、在node 01节点上操作

(1)已自动生成证书和 kubelet.kubeconfig文件

ls /opt/kubernetes/cfg/kubelet.kubeconfig 
ls /opt/kubernetes/ssl

 (2)加载 ip_vs 模块

 (3)使用proxy.sh 脚本启动 proxy服务

//使用proxy.sh脚本启动proxy服务
cd /opt/
chmod +x proxy.sh 
./proxy.sh 192.168.70.15
systemctl status kube-proxy.service 

 三、node02 节点部署

方法一: 

1、在node1 节点上将kubelet.sh、 proxy.sh 文件拷贝到node2 节点

cd /opt/
scp kubelet.sh proxy.sh root@192.168.70.20:/opt/

 2、node2 节点部署

(1)使用kubelet.sh脚本启动kubelet服务

cd /opt
chmod +x kubelet.sh
./kubelet.sh 192.168.70.20

(2)在master01节点上操作

kubectl get csr # 查看CSR请求
kubectl certificate approve # 通过CSR请求
kubectl get csr # 再次查看CSR请求
kubectl get nodes # 查看集群中的节点状态

 (3)在node2节点上操作

for i in $(ls /usr/lib/modules/$(uname -r)/kernel/net/netfilter/ipvs|grep -o "^[^.]*");do echo $i; /sbin/modinfo -F filename $i > /dev/null 2>&1 && /sbin/modprobe $i;done # 加载ipvs模块 
cd /opt
chmod +x proxy.sh 
./proxy.sh 192.168.70.20 # 使用proxy.sh脚本启动proxy服务
systemctl status kube-proxy.service # 查看服务状态

方法二:

1、在node01 节点操作

(1)把现成的/opt/kubernetes目录和Kubelet、kube-proxy的service服务管理文件复制到其他节点

cp -r /opt/kubernetes/ root:192.168.70.20:/opt/
scp /usr/lib/systemd/system/{kubelet,kube-proxy}.service root@192.168.70.20:/usr/lib/systemd/system/

2、在node02节点操作

(1)首先删除复制过来的证书,node02可自行申请证书

cd /opt/kubernetes/ssl/
rm -rf *

(2)修改配置文件kubelet、kubelet.config、kube-proxy的相关IP地址配置为当前节点的IP地址

(3) 加载ipvs模块

modeprobe ip_vs 

(4)启动kubelet和kube-proxy服务并设置开机自启

systemctl enable --now kubelet.service
systemctl enable --now kube-proxy.service

3、在master01节点上操作

kubectl get csr # 查看CSR请求
kubectl certificate approve # 通过CSR请求

方法二不进行贴图了,按文本敲一切OK的

四、K8S单节点测试 

1、maste/01操作

kubectl create deployment nginx-test --image=nginx:1.14    #以容器创建一个nginx的指定版本镜像
kubectl get pod  # 

2、查看 pod 详情

kubectl describe pod nginx-test-7dc4f9dcc9-bbz8s

3、查看pod额外信息(包括IP)

kubectl get pod -o wide

4、使用任意node节点访问pod测试

posted @ 2021-10-28 20:03  YhtWeirdo  阅读(255)  评论(0编辑  收藏  举报