fix:增加kube-proxy参数--cluster-cidr #663

pull/679/head
gjmzj 2019-08-25 23:19:30 +08:00
parent cfbb7686af
commit bc16122de6
2 changed files with 21 additions and 29 deletions

View File

@ -14,17 +14,19 @@ roles/kube-node/
│   └── main.yml # 变量配置文件 │   └── main.yml # 变量配置文件
├── tasks ├── tasks
│   ├── main.yml # 主执行文件 │   ├── main.yml # 主执行文件
│   └── node_lb.yml # haproxy 安装文件 │   ├── node_lb.yml # haproxy 安装文件
│   └── offline.yml # 离线安装 haproxy
└── templates └── templates
├── cni-default.conf.j2 # 默认cni插件配置模板 ├── cni-default.conf.j2 # 默认cni插件配置模板
├── haproxy.cfg.j2 # haproxy 配置模板 ├── haproxy.cfg.j2 # haproxy 配置模板
├── haproxy.service.j2 # haproxy 服务模板 ├── haproxy.service.j2 # haproxy 服务模板
├── kubelet-config.yaml.j2 # kubelet 独立配置文件
├── kubelet-csr.json.j2 # 证书请求模板 ├── kubelet-csr.json.j2 # 证书请求模板
├── kubelet.service.j2 # kubelet 服务模板 ├── kubelet.service.j2 # kubelet 服务模板
└── kube-proxy.service.j2 # kube-proxy 服务模板 └── kube-proxy.service.j2 # kube-proxy 服务模板
``` ```
请在另外窗口打开[roles/kube-node/tasks/main.yml](../../roles/kube-node/tasks/main.yml) 文件,对照看以下讲解内容。 请在另外窗口打开`roles/kube-node/tasks/main.yml`文件,对照看以下讲解内容。
### 变量配置文件 ### 变量配置文件
@ -39,52 +41,41 @@ roles/kube-node/
### 创建 kubelet 的服务文件 ### 创建 kubelet 的服务文件
+ 根据官方建议独立使用 kubelet 配置文件详见roles/kube-node/templates/kubelet-config.yaml.j2
+ 必须先创建工作目录 `/var/lib/kubelet` + 必须先创建工作目录 `/var/lib/kubelet`
``` bash ``` bash
[Unit] [Unit]
Description=Kubernetes Kubelet Description=Kubernetes Kubelet
Documentation=https://github.com/GoogleCloudPlatform/kubernetes Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=docker.service
Requires=docker.service
[Service] [Service]
WorkingDirectory=/var/lib/kubelet WorkingDirectory=/var/lib/kubelet
{% if KUBE_RESERVED_ENABLED == "yes" or SYS_RESERVED_ENABLED == "yes" %}
ExecStartPre=/bin/mount -o remount,rw '/sys/fs/cgroup'
ExecStartPre=/bin/mkdir -p /sys/fs/cgroup/cpuset/system.slice/kubelet.service ExecStartPre=/bin/mkdir -p /sys/fs/cgroup/cpuset/system.slice/kubelet.service
ExecStartPre=/bin/mkdir -p /sys/fs/cgroup/hugetlb/system.slice/kubelet.service ExecStartPre=/bin/mkdir -p /sys/fs/cgroup/hugetlb/system.slice/kubelet.service
ExecStartPre=/bin/mkdir -p /sys/fs/cgroup/memory/system.slice/kubelet.service ExecStartPre=/bin/mkdir -p /sys/fs/cgroup/memory/system.slice/kubelet.service
ExecStartPre=/bin/mkdir -p /sys/fs/cgroup/pids/system.slice/kubelet.service ExecStartPre=/bin/mkdir -p /sys/fs/cgroup/pids/system.slice/kubelet.service
{% endif %}
ExecStart={{ bin_dir }}/kubelet \ ExecStart={{ bin_dir }}/kubelet \
--address={{ inventory_hostname }} \ --config=/var/lib/kubelet/config.yaml \
{% if KUBE_VER|float < 1.13 %}
--allow-privileged=true \ --allow-privileged=true \
--anonymous-auth=false \ {% endif %}
--authentication-token-webhook \
--authorization-mode=Webhook \
--pod-manifest-path=/etc/kubernetes/manifest \
--client-ca-file={{ ca_dir }}/ca.pem \
--cluster-dns={{ CLUSTER_DNS_SVC_IP }} \
--cluster-domain={{ CLUSTER_DNS_DOMAIN }} \
--cni-bin-dir={{ bin_dir }} \ --cni-bin-dir={{ bin_dir }} \
--cni-conf-dir=/etc/cni/net.d \ --cni-conf-dir=/etc/cni/net.d \
--fail-swap-on=false \ {% if CONTAINER_RUNTIME == "containerd" %}
--hairpin-mode hairpin-veth \ --container-runtime=remote \
--container-runtime-endpoint=unix:///run/containerd/containerd.sock \
{% endif %}
--hostname-override={{ inventory_hostname }} \ --hostname-override={{ inventory_hostname }} \
--kubeconfig=/etc/kubernetes/kubelet.kubeconfig \ --kubeconfig=/etc/kubernetes/kubelet.kubeconfig \
--max-pods={{ MAX_PODS }} \
--network-plugin=cni \ --network-plugin=cni \
--pod-infra-container-image=mirrorgooglecontainers/pause-amd64:3.1 \ --pod-infra-container-image={{ SANDBOX_IMAGE }} \
--register-node=true \
--root-dir={{ KUBELET_ROOT_DIR }} \ --root-dir={{ KUBELET_ROOT_DIR }} \
--tls-cert-file={{ ca_dir }}/kubelet.pem \
--tls-private-key-file={{ ca_dir }}/kubelet-key.pem \
--cgroups-per-qos=true \
--cgroup-driver=cgroupfs \
--enforce-node-allocatable=pods,kube-reserved \
--kube-reserved={{ KUBE_RESERVED }} \
--kube-reserved-cgroup=/system.slice/kubelet.service \
--eviction-hard={{ HARD_EVICTION }} \
--v=2 --v=2
Restart=on-failure Restart=always
RestartSec=5 RestartSec=5
[Install] [Install]
@ -116,6 +107,7 @@ After=network.target
WorkingDirectory=/var/lib/kube-proxy WorkingDirectory=/var/lib/kube-proxy
ExecStart={{ bin_dir }}/kube-proxy \ ExecStart={{ bin_dir }}/kube-proxy \
--bind-address={{ inventory_hostname }} \ --bind-address={{ inventory_hostname }} \
--cluster-cidr={{ CLUSTER_CIDR }} \
--hostname-override={{ inventory_hostname }} \ --hostname-override={{ inventory_hostname }} \
--kubeconfig=/etc/kubernetes/kube-proxy.kubeconfig \ --kubeconfig=/etc/kubernetes/kube-proxy.kubeconfig \
--logtostderr=true \ --logtostderr=true \
@ -129,7 +121,7 @@ WantedBy=multi-user.target
``` ```
+ --hostname-override 参数值必须与 kubelet 的值一致,否则 kube-proxy 启动后会找不到该 Node从而不会创建任何 iptables 规则 + --hostname-override 参数值必须与 kubelet 的值一致,否则 kube-proxy 启动后会找不到该 Node从而不会创建任何 iptables 规则
+ 特别注意kube-proxy 根据 --cluster-cidr 判断集群内部和外部流量,指定 --cluster-cidr 或 --masquerade-all 选项后 kube-proxy 才会对访问 Service IP 的请求做 SNAT但是这个特性与calico 实现 network policy冲突所以如果要用 network policy这两个选项都不要指定。 + 特别注意kube-proxy 根据 --cluster-cidr 判断集群内部和外部流量,指定 --cluster-cidr 或 --masquerade-all 选项后 kube-proxy 才会对访问 Service IP 的请求做 SNAT
### 验证 node 状态 ### 验证 node 状态

View File

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