Skip to content

Commit bc16122

Browse files
committed
fix:增加kube-proxy参数--cluster-cidr easzlab#663
1 parent cfbb768 commit bc16122

File tree

2 files changed

+21
-29
lines changed

2 files changed

+21
-29
lines changed

docs/setup/05-install_kube_node.md

+19-27
Original file line numberDiff line numberDiff line change
@@ -14,17 +14,19 @@ roles/kube-node/
1414
│   └── main.yml # 变量配置文件
1515
├── tasks
1616
│   ├── main.yml # 主执行文件
17-
│   └── node_lb.yml # haproxy 安装文件
17+
│   ├── node_lb.yml # haproxy 安装文件
18+
│   └── offline.yml # 离线安装 haproxy
1819
└── templates
1920
├── cni-default.conf.j2 # 默认cni插件配置模板
2021
├── haproxy.cfg.j2 # haproxy 配置模板
2122
├── haproxy.service.j2 # haproxy 服务模板
23+
├── kubelet-config.yaml.j2 # kubelet 独立配置文件
2224
├── kubelet-csr.json.j2 # 证书请求模板
2325
├── kubelet.service.j2 # kubelet 服务模板
2426
└── kube-proxy.service.j2 # kube-proxy 服务模板
2527
```
2628

27-
请在另外窗口打开[roles/kube-node/tasks/main.yml](../../roles/kube-node/tasks/main.yml) 文件,对照看以下讲解内容。
29+
请在另外窗口打开`roles/kube-node/tasks/main.yml`文件,对照看以下讲解内容。
2830

2931
### 变量配置文件
3032

@@ -39,52 +41,41 @@ roles/kube-node/
3941

4042
### 创建 kubelet 的服务文件
4143

44+
+ 根据官方建议独立使用 kubelet 配置文件,详见roles/kube-node/templates/kubelet-config.yaml.j2
4245
+ 必须先创建工作目录 `/var/lib/kubelet`
4346

4447
``` bash
4548
[Unit]
4649
Description=Kubernetes Kubelet
4750
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
48-
After=docker.service
49-
Requires=docker.service
5051

5152
[Service]
5253
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'
5356
ExecStartPre=/bin/mkdir -p /sys/fs/cgroup/cpuset/system.slice/kubelet.service
5457
ExecStartPre=/bin/mkdir -p /sys/fs/cgroup/hugetlb/system.slice/kubelet.service
5558
ExecStartPre=/bin/mkdir -p /sys/fs/cgroup/memory/system.slice/kubelet.service
5659
ExecStartPre=/bin/mkdir -p /sys/fs/cgroup/pids/system.slice/kubelet.service
60+
{% endif %}
5761
ExecStart={{ bin_dir }}/kubelet \
58-
--address={{ inventory_hostname }} \
62+
--config=/var/lib/kubelet/config.yaml \
63+
{% if KUBE_VER|float < 1.13 %}
5964
--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 %}
6766
--cni-bin-dir={{ bin_dir }} \
6867
--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 %}
7172
--hostname-override={{ inventory_hostname }} \
7273
--kubeconfig=/etc/kubernetes/kubelet.kubeconfig \
73-
--max-pods={{ MAX_PODS }} \
7474
--network-plugin=cni \
75-
--pod-infra-container-image=mirrorgooglecontainers/pause-amd64:3.1 \
76-
--register-node=true \
75+
--pod-infra-container-image={{ SANDBOX_IMAGE }} \
7776
--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 }} \
8677
--v=2
87-
Restart=on-failure
78+
Restart=always
8879
RestartSec=5
8980

9081
[Install]
@@ -116,6 +107,7 @@ After=network.target
116107
WorkingDirectory=/var/lib/kube-proxy
117108
ExecStart={{ bin_dir }}/kube-proxy \
118109
--bind-address={{ inventory_hostname }} \
110+
--cluster-cidr={{ CLUSTER_CIDR }} \
119111
--hostname-override={{ inventory_hostname }} \
120112
--kubeconfig=/etc/kubernetes/kube-proxy.kubeconfig \
121113
--logtostderr=true \
@@ -129,7 +121,7 @@ WantedBy=multi-user.target
129121
```
130122
131123
+ --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;
133125
134126
### 验证 node 状态
135127

roles/kube-node/templates/kube-proxy.service.j2

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@ Documentation=https://github.com/GoogleCloudPlatform/kubernetes
44
After=network.target
55

66
[Service]
7-
# kube-proxy 根据 --cluster-cidr 判断集群内部和外部流量,指定 --cluster-cidr 或 --masquerade-all 选项后
8-
# kube-proxy 会对访问 Service IP 的请求做 SNAT,这个特性与calico 实现 network policy冲突,因此禁用
7+
# kube-proxy 根据 --cluster-cidr 判断集群内部和外部流量,指定 --cluster-cidr 或 --masquerade-all 选项后,kube-proxy 会对访问 Service IP 的请求做 SNAT
98
WorkingDirectory=/var/lib/kube-proxy
109
ExecStart={{ bin_dir }}/kube-proxy \
1110
--bind-address={{ inventory_hostname }} \
11+
--cluster-cidr={{ CLUSTER_CIDR }} \
1212
--hostname-override={{ inventory_hostname }} \
1313
--kubeconfig=/etc/kubernetes/kube-proxy.kubeconfig \
1414
--logtostderr=true \

0 commit comments

Comments
 (0)