3-1 部署kubelet

1.1 集群规划

主机名 角色 IP地址
pg60-31.k8s.host.com kubelet 10.20.60.31
pg60-32.k8s.host.com kubelet 10.20.60.32
pg60-33.k8s.host.com kubelet 10.20.60.33

1.2 下载和分发 kubelet 二进制文件

参考(摘要):

  • 《2-1. kubernetes环境准备》
shell> echo -e "DNS1=10.20.60.11\nDNS2=10.20.60.12" >> /etc/sysconfig/network-scripts/ifcfg-eth0
shell> systemctl restart network
shell> rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
shell> yum --enablerepo=elrepo-kernel install -y kernel-lt
shell> grub2-set-default 0
shell> echo 'PATH=/opt/etcd/bin:/opt/kubernetes/server/bin/:$PATH' >> /root/.bashrc
shell> reboot
  • 《2-2.2 签发kubernetes ca证书》
shell> mkdir -p /etc/kubernetes/pki/
shell> ls -l /etc/kubernetes/pki/ca*.pem
  • 《1-2. Docker安装部署》
  • 《2-3.2 安装和配置kubectl》
shell> mkdir ~/.kube
shell> cp /usr/local/src/kubectl.kubeconfig ~/.kube/config
  • 《2-3.3 部署kube-apiserver集群(systemd)》
shell> wget http://dlsw.91donkey.com/software/source/k8s/v1.18.2/kubernetes-server-linux-amd64.tar.gz
shell> tar zxf kubernetes-server-linux-amd64.tar.gz -C /opt/
shell> mkdir /opt/kubernetes/server/sbin

1.3 创建 kubelet bootstrap kubeconfig 文件

shell> cat > kubelet-bootstrap.sh << "EOF"
#!/bin/bash -
node_name="pg60-31 pg60-32 pg60-33"

kubelet(){
# 创建 token
export BOOTSTRAP_TOKEN=$(kubeadm token create \
  --description kubelet-bootstrap-token \
  --groups system:bootstrappers:${node_name} \
  --kubeconfig ~/.kube/config)

# 设置集群参数
kubectl config set-cluster kubernetes \
  --certificate-authority=/etc/kubernetes/pki/ca.pem \
  --embed-certs=true \
  --server="https://10.20.60.10:6443" \
  --kubeconfig=kubelet-bootstrap-${node_name}.kubeconfig

# 设置客户端认证参数
kubectl config set-credentials kubelet-bootstrap \
  --token=${BOOTSTRAP_TOKEN} \
  --kubeconfig=kubelet-bootstrap-${node_name}.kubeconfig

# 设置上下文参数
kubectl config set-context default \
  --cluster=kubernetes \
  --user=kubelet-bootstrap \
  --kubeconfig=kubelet-bootstrap-${node_name}.kubeconfig

# 设置默认上下文
kubectl config use-context default --kubeconfig=kubelet-bootstrap-${node_name}.kubeconfig
}

for node_name in ${node_name}
do
    kubelet
done
EOF

注意修改 node_name 字段

1.4 查看 kubeadm 为各节点创建的 token

  • token 有效期为 1 天,超期后将不能再被用来 bootstrap kubelet,且会被 kube-controller-manager 的 tokencleaner 清理。

1.5 分发 bootstrap kubeconfig 文件到所有 worker 节点

shell> scp kubelet-bootstrap-pg60-32.kubeconfig root@${node_ip}:/etc/kubernetes/kubelet-bootstrap.kubeconfig

1.6 创建和分发 kubelet 参数配置文件

  • 创建配置文件
shell> cat > kubelet-config.yaml.template  << EOF
kind: KubeletConfiguration
apiVersion: kubelet.config.k8s.io/v1beta1
address: "10.20.60.31"
staticPodPath: ""
syncFrequency: 1m
fileCheckFrequency: 20s
httpCheckFrequency: 20s
staticPodURL: ""
port: 10250
readOnlyPort: 0
rotateCertificates: true
serverTLSBootstrap: true
authentication:
  anonymous:
    enabled: false
  webhook:
    enabled: true
  x509:
    clientCAFile: "/etc/kubernetes/pki/ca.pem"
authorization:
  mode: Webhook
registryPullQPS: 0
registryBurst: 20
eventRecordQPS: 0
eventBurst: 20
enableDebuggingHandlers: true
enableContentionProfiling: true
healthzPort: 10248
healthzBindAddress: "10.20.60.31"
clusterDomain: "cluster.local"
clusterDNS:
  - "10.254.0.2"
//  - "192.168.0.2"
nodeStatusUpdateFrequency: 10s
nodeStatusReportFrequency: 1m
imageMinimumGCAge: 2m
imageGCHighThresholdPercent: 85
imageGCLowThresholdPercent: 80
volumeStatsAggPeriod: 1m
kubeletCgroups: ""
systemCgroups: ""
cgroupRoot: ""
cgroupsPerQOS: true
cgroupDriver: cgroupfs
runtimeRequestTimeout: 10m
hairpinMode: promiscuous-bridge
maxPods: 220
podCIDR: "172.60.0.0/16"
podPidsLimit: -1
resolvConf: /etc/resolv.conf
maxOpenFiles: 1000000
kubeAPIQPS: 1000
kubeAPIBurst: 2000
serializeImagePulls: false
evictionHard:
  memory.available: "100Mi"
  nodefs.available: "10%"
  nodefs.inodesFree: "5%"
  imagefs.available: "15%"
evictionSoft: {}
enableControllerAttachDetach: true
failSwapOn: true
containerLogMaxSize: 20Mi
containerLogMaxFiles: 10
systemReserved: {}
kubeReserved: {}
systemReservedCgroup: ""
kubeReservedCgroup: ""
enforceNodeAllocatable: ["pods"]
EOF

注意根据不同服务器修改配置项

  • 分发配置文件
shell> scp kubelet-config.yaml.template root@${node_ip}/etc/kubernetes/kubelet-config.yaml

1.7 创建和分发 kubelet systemd unit 文件

  • 创建
shell> cat > kubelet.service.template  << "EOF"
[Unit]
Description=Kubernetes Kubelet
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=containerd.service
Requires=containerd.service

[Service]
ExecStart=/opt/kubernetes/server/bin/kubelet \
  --bootstrap-kubeconfig=/etc/kubernetes/kubelet-bootstrap.kubeconfig \
  --cgroup-driver=systemd \
  --cert-dir=/etc/kubernetes/pki \
  --root-dir=/export/kubernetes/kubelet \
  --kubeconfig=/etc/kubernetes/kubelet.kubeconfig \
  --config=/etc/kubernetes/kubelet-config.yaml \
  --hostname-override=pg60-31 \
  --image-pull-progress-deadline=15m \
  --pod-infra-container-image=kubernetes/pause:latest \
//  --pod-infra-container-image=ibmcom/pause:3.1 \
  --volume-plugin-dir=/export/kubernetes/kubelet/kubelet-plugins/volume/exec/ \
  --logtostderr=true \
  --v=2
Restart=always
RestartSec=5
StartLimitInterval=0

[Install]
WantedBy=multi-user.target
EOF

注意根据不同服务器修改配置项

  • 分发
shell> scp kubelet.service root@${node_ip}:/etc/systemd/system/kubelet.service

1.8 启动 kubelet 服务

shell> mkdir -p /export/kubernetes/kubelet/kubelet-plugins/volume/exec/
shell> /usr/sbin/swapoff -a
shell> systemctl daemon-reload && systemctl enable kubelet && systemctl restart kubelet

1.9 查看 kubelet 情况

所有节点均注册

posted @ 2020-06-23 16:57  龍龍小宝  阅读(109)  评论(0)    收藏  举报