前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >二进制部署k8s教程19 - 加入worker节点

二进制部署k8s教程19 - 加入worker节点

原创
作者头像
janrs.com
发布2023-03-08 21:05:12
5450
发布2023-03-08 21:05:12
举报

!TIP 二进制部署 k8s - 部署 kubelet TLS Bootstrap 引导证书方式


转载请注明出处:https://janrs.com/sxbs 有任何问题欢迎在底部评论区发言。

部署 kubelet

!NOTE 部署 kubelet 之前需要初始化系统环境以及设置 calico 网络。

node 节点上,kubelet 是需要对外提供服务的。在 k8s 中,调用 kubelet 服务的也只有 kube-apiserver

所以,kubelet 可以拥有自身的 ca 签发机构。

kubelet 自身作为服务,需要生成自身的 server 证书。

并且 kube-apiserver 需要调用 kubelet 以调度 pod ,所以 kubelet 需要为 kube-apiserber 签发客户端 client 证书。

node 节点上的 kubelet 在使用 kubeconfigkube-apiserver 建立连接的时候,也需要 kube-apiserver

为其颁发客户端 client 证书。

设置 calico 网络

部署 calico 之前需要配置一下网络。具体查看官网说明。

地址:(https://projectcalico.docs.tigera.io/maintenance/troubleshoot/troubleshooting#configure-networkmanager)

代码语言:shell
复制
cat > /etc/NetworkManager/conf.d/calico.conf <<EOF
[keyfile]
unmanaged-devices=interface-name:cali*;interface-name:tunl*;interface-name:vxlan.calico;interface-name:vxlan-v6.calico;interface-name:wireguard.cali;interface-name:wg-v6.cali
EOF

重启网络

代码语言:shell
复制
systemctl restart NetworkManager

1.创建目录

代码语言:shell
复制
# 创建证书存放目录
mkdir -p /etc/kubernetes/pki/{kubelet/,apiserver/}

# 创建日志存放目录
mkdir -p /var/log/kubernetes/{kubelet/,kube-proxy/}

# 创建存放 kubeconfig 的目录以及配置目录
mkdir -p /etc/kubernetes/{kubeconfig/,config/}

# 创建 kubelet 工作目录以及 kube-proxy 工作目录
mkdir -p /var/lib/{kubelet/,kube-proxy/}

2.安装 docker

添加源

代码语言:shell
复制
dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo

安装

代码语言:shell
复制
dnf install docker-ce -y

创建 docder 的 配置文件 daemon-reload

!NOTE Docker 在默认情况下使用的 Cgroup Drivercgroupfs ,而 kubernetes 推荐使用 systemd 来代替 cgroupfs

代码语言:shell
复制
mkdir /etc/docker && \
cat <<EOF > /etc/docker/daemon.json
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "registry-mirrors": [
    "http://hub-mirror.c.163.com",
    "https://registry.docker-cn.com",
    "https://docker.mirrors.ustc.edu.cn"
  ],
  "log-opts": {
    "max-size": "100m"
  }
}
EOF

启动

代码语言:shell
复制
systemctl daemon-reload && \
systemctl enable docker && \
systemctl enable containerd && \
systemctl start docker

检查启动状态

代码语言:shell
复制
systemctl status docker && \
systemctl status containerd

3.下载镜像

代码语言:shell
复制
docker pull registry.aliyuncs.com/google_containers/pause:3.6

4.上传组件

上传 kubectl , kubelet , kube-proxy 组件

前面已经下载到 k8s-master01 服务器,直接上传即可

代码语言:shell
复制
cd /home/kubernetes/server/bin/ && \
scp kubectl kubelet kube-proxy root@172.16.222.231:/usr/local/bin/

5.创建 bootstrap.kubeconfig

设置集群参数

代码语言:shell
复制
kubectl config set-cluster bootstrap \
--server=https://172.16.222.110:8443 \
--certificate-authority=/etc/kubernetes/pki/apiserver/apiserver-ca.pem \
--kubeconfig=/etc/kubernetes/kubeconfig/bootstrap.kubeconfig

设置 bootstrapers 认证参数

代码语言:shell
复制
kubectl config set-credentials kubelet-bootstrap \
--token=dafe33bc8fcdae7f9f16df53a95199fa \
--kubeconfig=/etc/kubernetes/kubeconfig/bootstrap.kubeconfig

设置用户参数

代码语言:shell
复制
kubectl config \
set-context bootstrap --user=kubelet-bootstrap \
--cluster=bootstrap \
--kubeconfig=/etc/kubernetes/kubeconfig/bootstrap.kubeconfig

设置当前上下文参数

代码语言:shell
复制
kubectl config use-context bootstrap \
--kubeconfig=/etc/kubernetes/kubeconfig/bootstrap.kubeconfig

6.上传证书

上传 kubeletca 证书

上传到 node 节点

代码语言:shell
复制
scp /ssl/kubelet-ca.pem root@172.16.222.231:/etc/kubernetes/pki/kubelet/

上传 kube-apiserverca 证书

上传到 node 节点

代码语言:shell
复制
scp /ssl/apiserver-ca.pem root@172.16.222.231:/etc/kubernetes/pki/apiserver/

7.启动服务

7-1.创建 kubelet 配置文件

代码语言:shell
复制
cat > /etc/kubernetes/config/kubelet.yaml <<EOF
apiVersion: "kubelet.config.k8s.io/v1beta1"
kind: "KubeletConfiguration"
enableServer: true
address: "172.16.222.231"
# 开启 kubelet 客户端 client 证书自动轮换
rotateCertificates: true

# 开启颁发 kubelet 服务端证书的标志
# 开启此标志,必须同时开启下面的特性门控。否则无效。
serverTLSBootstrap: true

# kubelet 同样要开启 Beta/Alpha 特性门控标志
# 该特性是用来自动轮换的,并不是自动颁发的
featureGates:
  RotateKubeletServerCertificate: true

authentication:
  anonymous:
    enabled: false
  webhook:
     enabled: false
     cacheTTL: "2m"
  x509:
    clientCAFile: "/etc/kubernetes/pki/kubelet/kubelet-ca.pem"
authorization:
   mode: "Webhook"
   webhook:
     cacheAuthorizedTTL: "5m"
     cacheUnauthorizedTTL: "30s"
cgroupDriver: "systemd"
clusterDomain: "cluster.local"
clusterDNS:
- "10.68.0.1"
EOF

7-2.创建启动配置文件

代码语言:shell
复制
cat > /etc/kubernetes/config/kubelet.conf <<EOF
KUBELET_OPTS="--network-plugin=cni
--config=/etc/kubernetes/config/kubelet.yaml
--alsologtostderr=true
--logtostderr=false
--log-dir=/var/log/kubernetes/kubelet/
--kubeconfig=/etc/kubernetes/kubeconfig/kubelet.kubeconfig
--pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.6
--bootstrap-kubeconfig=/etc/kubernetes/kubeconfig/bootstrap.kubeconfig
--cert-dir=/etc/kubernetes/pki/kubelet/
--hostname-override=172.16.222.231
--v=2"
EOF

7-3.创建启动文件

代码语言:shell
复制
cat > /usr/lib/systemd/system/kubelet.service <<'EOF'
[Unit]
Description=Kubernetes Kubelet Service
Documentation=https://github.com/kubernetes/kubernetes
After=docker.service
Requires=docker.service

[Service]
WorkingDirectory=/var/lib/kubelet/
EnvironmentFile=-/etc/kubernetes/config/kubelet.conf
ExecStart=/usr/local/bin/kubelet $KUBELET_OPTS
Restart=on-failure
RestartSec=5
 
[Install]
WantedBy=multi-user.target
EOF

8.启动服务

启动服务

代码语言:shell
复制
systemctl daemon-reload && \
systemctl start kubelet

检查没有错误后,设置开机启动

代码语言:shell
复制
systemctl enable kubelet

9.其他操作

停止服务

代码语言:shell
复制
systemctl stop kubelet

查看服务

代码语言:shell
复制
systemctl status kubelet --no-pager -l

查看进程错误

代码语言:shell
复制
journalctl -l --no-pager  -u kubelet

删除进程日志

代码语言:shell
复制
rm -rvf /var/log/journal/*

删除 kubelet 日志

代码语言:shell
复制
rm -rvf /var/log/kubernetes/kubelet/*

重启或者重新部署报错,有可能需要删除已经生成的工作数据

代码语言:shell
复制
rm -rvf /var/lib/kubelet/*

10.检测

master 服务器查看节点是否加入

代码语言:shell
复制
kubectl get nodes

显示

代码语言:text
复制
NAME         STATUS     ROLES    AGE     VERSION
k8s-node01   NotReady   <none>   4h38m   v1.23.9

可以看到 node 节点已经加入进来了,但是显示的 NotReady 是因为 node 节点还没部署网络插件。后面再部署网络插件。


至此。node 节点的 kubelet 部署成功。

转载请注明出处:https://janrs.com/sxbs 有任何问题欢迎在底部评论区发言。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 部署 kubelet
    • 设置 calico 网络
      • 1.创建目录
        • 2.安装 docker
          • 3.下载镜像
            • 4.上传组件
              • 5.创建 bootstrap.kubeconfig
                • 6.上传证书
                  • 7.启动服务
                    • 7-1.创建 kubelet 配置文件
                    • 7-2.创建启动配置文件
                    • 7-3.创建启动文件
                  • 8.启动服务
                    • 9.其他操作
                      • 10.检测
                        • 至此。node 节点的 kubelet 部署成功。
                        相关产品与服务
                        容器服务
                        腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                        领券
                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档