【容器化】Kubernetes二进制高可用部署7-Kubelet和kube-Proxy部署

零、目录

一、说明

本文将部署Kubernetes组件kubelet和kube-proxy

二、前提

  • docker 已安装且 Cgroup driver 为 systemd,反正就是 docker 和 kubelet 的 Cgroup Driver 需要一致。
  • Kubernetes创建pod时需要一个pause的镜像,而该镜像tag默认为k8s.gcr.io/pause:3.2,这个镜像源k8s.gcr.io是 google 的,国内默认都是不能访问的,所以有以下三种方式处理这个镜像拉取失败问题:
    • (推荐)docker配置国内镜像源(如阿里的https://registry.cn-hangzhou.aliyuncs.com),在阿里的镜像源中,pause在google_containers仓库中,所以需要修改下方 kubelet 的启动参数,添加 --pod-infra-container-image=google_containers/pause:3.2
    • 不修改docker镜像源的情况下,可修改下方 kubelet 的启动参数,添加 --pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2
    • 从docker官方仓库拉取rancher/pause:3.2镜像,并使用docker tag修改tag为k8s.gcr.io/pause:3.2,不过这个方法每加一个节点就要执行一次,不建议使用。

三、复制二进制文件到/usr/bin目录

1
2
3
# 所有节点执行
cp /usr/local/src/kubernetes/server/bin/kubelet /usr/bin
cp /usr/local/src/kubernetes/server/bin/kube-proxy /usr/bin

四、创建kubelet服务

创建kubelet配置文件

配置文件 kubelet.conf 参数说明:

  • –kubeconfig:设置与 API Server 连接的相关配置,可以与 kube-controller-manager 使用的 kubeconfig 文件相同。需要将相关客户端证书文件从 Master 主机复制到 Node 主机的 /etc/kubernetes/pki 目录下,例如 ca.crtclient.keyclient.crt文件
  • –config:kubelet 配置文件,从 Kubernetes 1.10 版本开始引入,设置可以让多个 Node 共享的配置参数,例如addressportcgroupDriverclusterDNSclusterDomain
  • –hostname-override:设置本 Node 在集群中的名称,默认值为主机名,应将各 Node 设置为主机IP或域名
  • –network-plugin:网络插件类型,建议使用 CNI 网络插件

配置文件 kubelet.config 参数说明:

  • address:服务监听 IP 地址
  • port:服务监听端口号,默认值为 10250
  • cgroupDriver:设置为 cgroupDriver 驱动,默认值为 cgroupfs,可选项包括 systemd
  • clusterDNS:集群 DNS 服务的 IP 地址,例如 169.169.0.100
  • clusterDomain:服务 DNS 域名后缀,例如 cluster.local
  • authentication:设置是否允许匿名访问或者是否使用 webhook 进行鉴权
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# 192.168.56.105节点配置
cat << EOF > /etc/kubernetes/kubelet.conf
KUBELET_ARGS="--kubeconfig=/etc/kubernetes/kubeconfig \
--config=/etc/kubernetes/kubelet.config \
--hostname-override=192.168.56.105 \
--network-plugin=cni \
--log-dir=/var/log/kubernetes --logtostderr=false --v=0"
EOF


# 192.168.56.106节点配置
cat << EOF > /etc/kubernetes/kubelet.conf
KUBELET_ARGS="--kubeconfig=/etc/kubernetes/kubeconfig \
--config=/etc/kubernetes/kubelet.config \
--hostname-override=192.168.56.106 \
--network-plugin=cni \
--log-dir=/var/log/kubernetes --logtostderr=false --v=0"
EOF


# 192.168.56.107节点配置
cat << EOF > /etc/kubernetes/kubelet.conf
KUBELET_ARGS="--kubeconfig=/etc/kubernetes/kubeconfig \
--config=/etc/kubernetes/kubelet.config \
--hostname-override=192.168.56.107 \
--network-plugin=cni \
--log-dir=/var/log/kubernetes --logtostderr=false --v=0"
EOF


# 所有节点执行
cat << EOF > /etc/kubernetes/kubelet.config
kind: KubeletConfiguration
apiVersion: kubelet.config.k8s.io/v1beta1
address: 0.0.0.0
port: 10250
cgroupDriver: systemd
clusterDNS: ["169.169.0.100"]
clusterDomain: cluster.local
authentication:
anonymous:
enabled: true
EOF

创建系统服务文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
cat << EOF > /usr/lib/systemd/system/kubelet.service
[Unit]
Description=Kubernetes Kubelet Server
Documentation=https://github.com/kubernetes/kubernetes
After=docker.target

[Service]
EnvironmentFile=/etc/kubernetes/kubelet.conf
ExecStart=/usr/bin/kubelet \$KUBELET_ARGS
Restart=always

[Install]
WantedBy=multi-user.target
EOF

启动kubelet服务

1
2
3
systemctl daemon-reload
systemctl start kubelet
systemctl enable kubelet

五、创建kube-proxy服务

创建kube-proxy配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 192.168.56.105节点配置
cat << EOF > /etc/kubernetes/kube-proxy.conf
KUBE_PROXY_ARGS="--kubeconfig=/etc/kubernetes/kubeconfig \
--hostname-override=192.168.56.105 \
--proxy-mode=iptables \
--logtostderr=false --log-dir=/var/log/kubernetes --v=0"
EOF


# 192.168.56.106节点配置
cat << EOF > /etc/kubernetes/kube-proxy.conf
KUBE_PROXY_ARGS="--kubeconfig=/etc/kubernetes/kubeconfig \
--hostname-override=192.168.56.106 \
--proxy-mode=iptables \
--logtostderr=false --log-dir=/var/log/kubernetes --v=0"
EOF


# 192.168.56.107节点配置
cat << EOF > /etc/kubernetes/kube-proxy.conf
KUBE_PROXY_ARGS="--kubeconfig=/etc/kubernetes/kubeconfig \
--hostname-override=192.168.56.107 \
--proxy-mode=iptables \
--logtostderr=false --log-dir=/var/log/kubernetes --v=0"
EOF

创建系统服务文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 所有节点执行
cat << EOF > /usr/lib/systemd/system/kube-proxy.service
[Unit]
Description=Kubernetes Kube-proxy Server
Documentation=https://github.com/kubernetes/kubernetes
After=network.target

[Service]
EnvironmentFile=/etc/kubernetes/kube-proxy.conf
ExecStart=/usr/bin/kube-proxy \$KUBE_PROXY_ARGS
Restart=always

[Install]
WantedBy=multi-user.target
EOF

启动kube-proxy服务

1
2
3
4
# 所有节点执行
systemctl daemon-reload
systemctl start kube-proxy
systemctl enable kube-proxy

六、Kubernetes集群查看

复制kubelet二进制文件到/usr/bin目录

1
cp /usr/local/src/kubernetes/server/bin/kubectl /usr/bin

查看集群节点

此时所有节点状态为 NotReady 是由于还没安装网络插件

1
2
3
4
5
6
kubectl --kubeconfig=/etc/kubernetes/kubeconfig get nodes -owide

# 如果不想使用--kubeconfig参数,则只需要在用户目录下创建 .kube 目录,把 /etc/kubernetes/kubeconfig 文件复制进去并命名为config
mkdir -p ~/.kube
cp /etc/kubernetes/kubeconfig ~/.kube/config
kubectl get nodes -owide

结果截图

(•̀ᴗ•́)و ̑̑

Share