跳转至

安装kubectl

一、给指定用户授权

1.1 授权

为用户kubelet-bootstrap授权,允许kubelet tls bootstrap创建CSR请求,如下命令

kubectl create clusterrolebinding kubelet-bootstrap1 --clusterrole=system:node-bootstrapper --user=kubelet-bootstrap

把system:certificates.k8s.io:certificatesigningrequests:nodeclient授权给kubelet-bootstrap,目的是实现对CSR的自动审批,如下命令

kubectl create clusterrolebinding kubelet-bootstrap2 --clusterrole=system:certificates.k8s.io:certificatesigningrequests:nodeclient --user=kubelet-bootstrap

这个用户名是在配置apiserver时用到的token文件/etc/kubernetes/bb.csv里指定的。

1.2 创建授权配置文件

# 进入证书目录
cd /etc/kubernetes/pki/

# 创建集群信息
kubectl config set-cluster kubernetes --certificate-authority=ca.pem --embed-certs=true --server=https://192.168.9.190:7443 --kubeconfig=kubelet-bootstrap.conf

# 创建用户信息
kubectl config set-credentials kubelet-bootstrap --token=6440328e1b3a1f4873dc  --kubeconfig=kubelet-bootstrap.conf

# 设置上下文
kubectl config set-context kubernetes --cluster=kubernetes --user=kubelet-bootstrap --kubeconfig=kubelet-bootstrap.conf

# 启用上下文
kubectl config use-context kubernetes --kubeconfig=kubelet-bootstrap.conf

# 剪切配置文件到/etc/kubernetes
mv kubelet-bootstrap.conf  /etc/kubernetes/

生成配置文件/etc/kubernetes/kubelet-bootstrap.conf之后,传到工作节点中,在这里是192-debian160-debian

二、创建kubelet配置文件

创建kubelet能用到的配置文件/etc/kubernetes/kubelet-config.yaml,这个文件的路径要和下面kubelet启动文件里指定的一致,内容如下

apiVersion: kubelet.config.k8s.io/v1beta1
address: 0.0.0.0
port: 10250 
readOnlyPort: 10255
authentication:
  anonymous:
    enabled: false
  webhook:
    cacheTTL: 0s
    enabled: true
  x509:
    clientCAFile: /etc/kubernetes/pki/ca.pem
authorization:
  mode: Webhook
  webhook:
    cacheAuthorizedTTL: 0s
    cacheUnauthorizedTTL: 0s
cgroupDriver: systemd
clusterDNS:
- 10.96.0.10
clusterDomain: cluster.local
cpuManagerReconcilePeriod: 0s
evictionPressureTransitionPeriod: 0s
fileCheckFrequency: 0s
healthzBindAddress: 127.0.0.1
httpCheckFrequency: 0s
imageMinimumGCAge: 0s
kind: KubeletConfiguration

这里我们指定clusterDNS的IP是10.96.0.10。

三、配置kubelet启动脚本

3.1 配置启动脚本

接下来在192-debian160-debian上启动kubelet,在让kubelet启动之前,我们需要有一个基础的pause镜像,以下是拉取命令,该镜像负责其k8s集群中pod启动之前的初始化操作

nerdctl pull registry.aliyuncs.com/google_containers/pause:3.6

创建kubelet的启动脚本文件/opt/kubernetes/server/bin/kubelet.sh文件,添加以下内容

#!/bin/bash
./kubelet \
    --bootstrap-kubeconfig=/etc/kubernetes/kubelet-bootstrap.conf  \
    --cert-dir=/var/lib/kubelet/pki \
    --hostname-override=node-192 \
    --kubeconfig=/etc/kubernetes/kubelet.kubeconfig \
    --config=/etc/kubernetes/kubelet-config.yaml \
    --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.6 \
    --container-runtime=remote \
    --container-runtime-endpoint=unix:///var/run/containerd/containerd.sock \
    --runtime-request-timeout=15m \
    --alsologtostderr=true \
    --logtostderr=false \
    --log-dir=/var/log/kubernetes \
    --v=2

添加可执行权限

chmod +x /opt/kubernetes/server/bin/kubelet.sh

创建数据目录和日志目录

# 创建kubelet所需要的日志目录
mkdir -p /var/log/kubernetes

3.2 配置管理服务

创建supervisor进程配置文件/etc/supervisor/conf.d/kube-kubelet.conf文件,添加以下内容

[program:kube-kubelet-192]
directory=/opt/kubernetes/server/bin
command=/opt/kubernetes/server/bin/kubelet.sh
numprocs=1
autostart=true
autorestart=true
startsecs=30
startretries=3
exitcodes=0,2
stopsignal=QUIT
stopwaitsecs=10
user=root
redirect_stderr=true
stdout_logfile=/data/logs/supervisor/kubelet.stdout.log
stdout_logfile_maxbytes=64MB
stdout_logfile_backups=4
stdout_capture_maxbytes=1MB
stdout_event_enabled=false

更新supervisord,如下命令

supervisorctl update

3.3 验证集群

此时,服务已经正常运行了,可以使用以下kubectl命令在查看节点信息

kubectl get nodes

如果看到以下信息,代表安装成功

root@199-debian:/etc/kubernetes# kubectl get nodes
NAME       STATUS   ROLES    AGE   VERSION
node-160   Ready    <none>   40s   v1.24.1
node-192   Ready    <none>   47s   v1.24.1

我们还可以设置集群的标签

# 设置集群为node标签
kubectl label node node-160 node-role.kubernetes.io/node=
kubectl label node node-192 node-role.kubernetes.io/node=