@@ -14,17 +14,19 @@ roles/kube-node/
14
14
│ └── main.yml # 变量配置文件
15
15
├── tasks
16
16
│ ├── main.yml # 主执行文件
17
- │ └── node_lb.yml # haproxy 安装文件
17
+ │ ├── node_lb.yml # haproxy 安装文件
18
+ │ └── offline.yml # 离线安装 haproxy
18
19
└── templates
19
20
├── cni-default.conf.j2 # 默认cni插件配置模板
20
21
├── haproxy.cfg.j2 # haproxy 配置模板
21
22
├── haproxy.service.j2 # haproxy 服务模板
23
+ ├── kubelet-config.yaml.j2 # kubelet 独立配置文件
22
24
├── kubelet-csr.json.j2 # 证书请求模板
23
25
├── kubelet.service.j2 # kubelet 服务模板
24
26
└── kube-proxy.service.j2 # kube-proxy 服务模板
25
27
```
26
28
27
- 请在另外窗口打开[ roles/kube-node/tasks/main.yml] ( ../../roles/kube-node/tasks/main.yml ) 文件,对照看以下讲解内容。
29
+ 请在另外窗口打开` roles/kube-node/tasks/main.yml ` 文件,对照看以下讲解内容。
28
30
29
31
### 变量配置文件
30
32
@@ -39,52 +41,41 @@ roles/kube-node/
39
41
40
42
### 创建 kubelet 的服务文件
41
43
44
+ + 根据官方建议独立使用 kubelet 配置文件,详见roles/kube-node/templates/kubelet-config.yaml.j2
42
45
+ 必须先创建工作目录 ` /var/lib/kubelet `
43
46
44
47
``` bash
45
48
[Unit]
46
49
Description=Kubernetes Kubelet
47
50
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
48
- After=docker.service
49
- Requires=docker.service
50
51
51
52
[Service]
52
53
WorkingDirectory=/var/lib/kubelet
54
+ {% if KUBE_RESERVED_ENABLED == " yes" or SYS_RESERVED_ENABLED == " yes" %}
55
+ ExecStartPre=/bin/mount -o remount,rw ' /sys/fs/cgroup'
53
56
ExecStartPre=/bin/mkdir -p /sys/fs/cgroup/cpuset/system.slice/kubelet.service
54
57
ExecStartPre=/bin/mkdir -p /sys/fs/cgroup/hugetlb/system.slice/kubelet.service
55
58
ExecStartPre=/bin/mkdir -p /sys/fs/cgroup/memory/system.slice/kubelet.service
56
59
ExecStartPre=/bin/mkdir -p /sys/fs/cgroup/pids/system.slice/kubelet.service
60
+ {% endif %}
57
61
ExecStart={{ bin_dir }}/kubelet \
58
- --address={{ inventory_hostname }} \
62
+ --config=/var/lib/kubelet/config.yaml \
63
+ {% if KUBE_VER| float < 1.13 %}
59
64
--allow-privileged=true \
60
- --anonymous-auth=false \
61
- --authentication-token-webhook \
62
- --authorization-mode=Webhook \
63
- --pod-manifest-path=/etc/kubernetes/manifest \
64
- --client-ca-file={{ ca_dir }}/ca.pem \
65
- --cluster-dns={{ CLUSTER_DNS_SVC_IP }} \
66
- --cluster-domain={{ CLUSTER_DNS_DOMAIN }} \
65
+ {% endif %}
67
66
--cni-bin-dir={{ bin_dir }} \
68
67
--cni-conf-dir=/etc/cni/net.d \
69
- --fail-swap-on=false \
70
- --hairpin-mode hairpin-veth \
68
+ {% if CONTAINER_RUNTIME == " containerd" %}
69
+ --container-runtime=remote \
70
+ --container-runtime-endpoint=unix:///run/containerd/containerd.sock \
71
+ {% endif %}
71
72
--hostname-override={{ inventory_hostname }} \
72
73
--kubeconfig=/etc/kubernetes/kubelet.kubeconfig \
73
- --max-pods={{ MAX_PODS }} \
74
74
--network-plugin=cni \
75
- --pod-infra-container-image=mirrorgooglecontainers/pause-amd64:3.1 \
76
- --register-node=true \
75
+ --pod-infra-container-image={{ SANDBOX_IMAGE }} \
77
76
--root-dir={{ KUBELET_ROOT_DIR }} \
78
- --tls-cert-file={{ ca_dir }}/kubelet.pem \
79
- --tls-private-key-file={{ ca_dir }}/kubelet-key.pem \
80
- --cgroups-per-qos=true \
81
- --cgroup-driver=cgroupfs \
82
- --enforce-node-allocatable=pods,kube-reserved \
83
- --kube-reserved={{ KUBE_RESERVED }} \
84
- --kube-reserved-cgroup=/system.slice/kubelet.service \
85
- --eviction-hard={{ HARD_EVICTION }} \
86
77
--v=2
87
- Restart=on-failure
78
+ Restart=always
88
79
RestartSec=5
89
80
90
81
[Install]
@@ -116,6 +107,7 @@ After=network.target
116
107
WorkingDirectory=/var/lib/kube-proxy
117
108
ExecStart={{ bin_dir }}/kube-proxy \
118
109
--bind-address={{ inventory_hostname }} \
110
+ --cluster-cidr={{ CLUSTER_CIDR }} \
119
111
--hostname-override={{ inventory_hostname }} \
120
112
--kubeconfig=/etc/kubernetes/kube-proxy.kubeconfig \
121
113
--logtostderr=true \
@@ -129,7 +121,7 @@ WantedBy=multi-user.target
129
121
` ` `
130
122
131
123
+ --hostname-override 参数值必须与 kubelet 的值一致,否则 kube-proxy 启动后会找不到该 Node,从而不会创建任何 iptables 规则
132
- + 特别注意:kube-proxy 根据 --cluster-cidr 判断集群内部和外部流量,指定 --cluster-cidr 或 --masquerade-all 选项后 kube-proxy 才会对访问 Service IP 的请求做 SNAT;但是这个特性与calico 实现 network policy冲突,所以如果要用 network policy,这两个选项都不要指定。
124
+ + 特别注意:kube-proxy 根据 --cluster-cidr 判断集群内部和外部流量,指定 --cluster-cidr 或 --masquerade-all 选项后 kube-proxy 才会对访问 Service IP 的请求做 SNAT;
133
125
134
126
# ## 验证 node 状态
135
127
0 commit comments