k8s 常见部署问题

查看集群各服务的进程是都在正常运行

kubectl get cs -o wide
kubectl get nodes -o wide
kubectl get svc kubernetes

容器一直在 pendding,node 节点的负载却很低

kube-scheduler 负责调度,查看这个服务的日志

node 节点无法访问 CLUSTER-IP 和 端口不通

看 kube-proxy 的日志,如果出现 "Failed to list *core.Endpoints: endpoints is forbidden: User "system:node:foo" cannot list endpoints at the cluster scope" ,则是 RBAC 的原因。
kube-proxy 没有权限访问 apiserver 的相应接口,导致获取不到 CLUSTER-IP,从而无法配置 iptables 策略导致访问失败。

cat <<EOF | kubectl apply -f -
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: system:kube-nodes
  namespace: ""
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: system:node-proxier
subjects:
  - apiGroup: rbac.authorization.k8s.io
    kind: Group
    name: system:nodes
EOF

kubernets 1.10 完整的 rbac.yaml

---

apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
  annotations:
    rbac.authorization.kubernetes.io/autoupdate: "true"
  labels:
    kubernetes.io/bootstrapping: rbac-defaults
  name: system:kube-apiserver-to-kubelet
rules:
  - apiGroups:
      - ""
    resources:
      - nodes/proxy
      - nodes/stats
      - nodes/log
      - nodes/spec
      - nodes/metrics
    verbs:
      - "*"

---

apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: system:kube-apiserver
  namespace: ""
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: system:kube-apiserver-to-kubelet
subjects:
  - apiGroup: rbac.authorization.k8s.io
    kind: User
    name: kubernetes

---

kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: system:kube-nodes
  namespace: ""
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: system:node-proxier
subjects:
  - apiGroup: rbac.authorization.k8s.io
    kind: Group
    name: system:nodes

flannel E0329 报错

E0329 14:33:39.634406 1 vxlan_network.go:158] failed to add vxlanRoute (10.244.0.0/24 -> 10.244.0.0): invalid argument
其他网卡的 ip 地址设置和 flannel 的网段冲突了。

flannel 或 calico 网络问题:相同主机上的 node 与 pod 互通,跨主机的 node 和 pod 不通,跨主机的 pod 和 pod 不通。其他情况都正常。

原因: 使用了 bridge 模块,导致跨主机不通。删除所有 node 节点的 /etc/cni/net.d/10-bridge.conf 文件,并重启所有 node 系统。

并没有使用 bridge 模块,跨主机网络还是不通

flannel: host-gw 或 vxlan+DirectRouting
calico: 关闭 ipip
kube-router
以上三种网络情况,我也遇到过跨主机网络不通的情况,主机 A ping 主机 B 上的容器,容器有回包,但是只到了主机B,之后就被丢弃了。问题没有直接解决。
绕过的办法:
flannel: vxlan 模式,不要开启 DirectRouting (默认就是这样设置的)
calico: 开启 ipip 模式 (默认就是这样设置的)
cilium:vxlan 模式(默认设置)

calico-node 使用官网推荐的办法无法启动成功,报错提示 Calico node 'foo' is already using the IPv4 address 10.244.0.1.

原因:calico-node 检测 ip 地址的时候,判断不准确。 解决方法: 在 calico.yml 中,autodetect 下面增加 IP_AUTODETECTION_METHOD :

            # Auto-detect the BGP IP address.
            - name: IP
              value: "autodetect"
            - name: IP_AUTODETECTION_METHOD
              value: "can-reach=8.8.8.8"

以下内容可以不加,不加上也不会报错。

            # Set noderef for node controller.
            - name: CALICO_K8S_NODE_REF
              valueFrom:
                fieldRef:
                  fieldPath: spec.nodeName
            - name: NODENAME
              valueFrom:
                fieldRef:
                  fieldPath: spec.nodeName

这个解决方法也是受 https://mritd.me/2017/07/31/calico-yml-bug/ 启发,再各种查资料综合而来。
如果服务器有外网网卡和内网网卡,需要把上面的 8.8.8.8 替换为内网网段的地址。

Flannel 宿主网络

如果宿主机不超过200台的中小规模的集群,尽可能所有宿主机使用相同的vlan,
flannel 使用 vxlan ,并开启 DirectRouting (替代默认的 vxlan )
kube-flannel.yaml 中 增加一行 "DirectRouting": true,

  net-conf.json: |
    {
      "Network": "10.244.0.0/16",
      "Backend": {
        "DirectRouting": true,
        "Type": "vxlan"
      }
    }

Flannel 开启 DirectRouting 后,pod 不通

待解决。目前设置的是 "DirectRouting": false, 来绕过这个问题。

Calico 网络

如果宿主机不超过200台的中小规模的集群,尽可能所有宿主机使用相同的vlan,
calico 使用 CALICO_IPV4POOL_IPIP 设为 Off ( Off, Always, CrossSubnet )
对于不同网段的宿主机,再部署一台 RR 节点

IPVS 模式取代 IPTABLES

在大量的 services 时,IPVS 效率显著提升。kube-proxy 的参数设置为

--ipvs-scheduler=wrr --ipvs-min-sync-period=5s --ipvs-sync-period=5s --proxy-mode=ipvs

参考
http://www.lijiaocn.com/%E9%A1%B9%E7%9B%AE/2017/04/11/calico-usage.html#bgp-speaker-rr%E6%A8%A1%E5%BC%8F

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,864评论 6 494
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,175评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,401评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,170评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,276评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,364评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,401评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,179评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,604评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,902评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,070评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,751评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,380评论 3 319
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,077评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,312评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,924评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,957评论 2 351

推荐阅读更多精彩内容