OpenYurt 安装前置条件

    一般场景下,CoreDNS是以Deployment形式部署,在边端场景下,域名解析请求无法跨,所以CoreDNS需要以Daemonset或者YurtAppDaemon形式部署,以实现将hostname解析为tunnelserver地址。

    修改kube-system namespace下的ConfigMap coredns,增加如下内容:

    修改后效果如下:

    1. apiVersion: v1
    2. data:
    3. Corefile: |
    4. .:53 {
    5. errors
    6. log . {
    7. class denial success
    8. }
    9. health {
    10. lameduck 5s
    11. }
    12. ready
    13. hosts /etc/edge/tunnel-nodes { # 增加hosts插件
    14. reload 300ms
    15. fallthrough
    16. }
    17. kubernetes cluster.local in-addr.arpa ip6.arpa {
    18. pods insecure
    19. fallthrough in-addr.arpa ip6.arpa
    20. ttl 30
    21. }
    22. prometheus :9153
    23. forward . /etc/resolv.conf {
    24. max_concurrent 1000
    25. }
    26. cache 30
    27. loop
    28. reload
    29. loadbalance
    30. }
    31. kind: ConfigMap
    32. metadata:
    33. namespace: kube-system

    2.2 CoreDNS 支持服务拓扑

    增加annotation,利用openyurt的机制实现边缘服务选择。

    1. # 利用openyurt实现endpoint过滤
    2. kubectl annotate svc kube-dns -n kube-system openyurt.io/topologyKeys='openyurt.io/nodepool'
    1. apiVersion: v1
    2. metadata:
    3. annotations:
    4. openyurt.io/topologyKeys: openyurt.io/nodepool
    5. prometheus.io/port: "9153"
    6. prometheus.io/scrape: "true"
    7. creationTimestamp: "2022-02-14T10:13:37Z"
    8. labels:
    9. k8s-app: kube-dns
    10. kubernetes.io/cluster-service: "true"
    11. kubernetes.io/name: KubeDNS
    12. name: kube-dns
    13. namespace: kube-system
    14. resourceVersion: "65474309"
    15. selfLink: /api/v1/namespaces/kube-system/services/kube-dns
    16. uid: ee23195f-44c3-4c70-99e2-aff4d5cf0ae1
    17. spec:
    18. clusterIP: 10.254.0.10
    19. ports:
    20. - name: dns
    21. port: 53
    22. protocol: UDP
    23. targetPort: 53
    24. - name: dns-tcp
    25. port: 53
    26. protocol: TCP
    27. targetPort: 53
    28. - name: metrics
    29. port: 9153
    30. protocol: TCP
    31. targetPort: 9153
    32. selector:
    33. k8s-app: kube-dns
    34. sessionAffinity: None
    35. type: ClusterIP

    如果CoreDNS原本使用DaemonSet部署,可以手工进行如下调整:

    1)可以调整CoreDNS的镜像为自己的版本;

    2)需要挂载Volume ConfigMap yurt-tunnel-nodes

    2.4 减少CoreDNS Deployment 副本数

    如果k8s不是用Deployment部署,可以不进行操作。

    1. kubectl scale --replicas=0 deployment/coredns -n kube-system

    云边端场景下,边缘节点间很有可能无法互通,因此需要endpoints基于nodepool进行拓扑。直接将kube-proxy的kubeconfig配置删除,将apiserver请求经过yurthub即可解决服务拓扑问题。

    1. kubectl edit cm -n kube-system kube-proxy

    注释掉config.conf文件下的clientConnection.kubeconfig,修改完后效果如下:

    1. apiVersion: v1
    2. data:
    3. apiVersion: kubeproxy.config.k8s.io/v1alpha1
    4. bindAddress: 0.0.0.0
    5. clientConnection:
    6. acceptContentTypes: ""
    7. burst: 0
    8. contentType: ""
    9. #kubeconfig: /var/lib/kube-proxy/kubeconfig.conf
    10. qps: 0
    11. clusterCIDR: 100.64.0.0/10
    12. configSyncPeriod: 0s
    13. // 省略

    重启KubeProxy Pod

    为使上述配置生效,需要重启kubeproxy的pod,线上环境谨慎操作

    可以通过KubeProxy的日志进行验证是否修改成功,为防止日志过多,生产环境谨慎使用

    1. kubectl edit ds -n kube-system kube-proxy
    1. apiVersion: apps/v1
    2. kind: DaemonSet
    3. metadata:
    4. annotations:
    5. deprecated.daemonset.template.generation: "3"
    6. creationTimestamp: "2022-05-10T06:27:27Z"
    7. generation: 3
    8. labels:
    9. k8s-app: kube-proxy
    10. name: kube-proxy
    11. namespace: kube-system
    12. resourceVersion: "5377081"
    13. uid: 0f8eccdd-d26f-48f0-8401-8d762a630dc8
    14. spec:
    15. revisionHistoryLimit: 10
    16. selector:
    17. matchLabels:
    18. k8s-app: kube-proxy
    19. template:
    20. metadata:
    21. creationTimestamp: null
    22. labels:
    23. k8s-app: kube-proxy
    24. spec:
    25. containers:
    26. - command:
    27. - /usr/local/bin/kube-proxy
    28. - --config=/var/lib/kube-proxy/config.conf
    29. - --hostname-override=$(NODE_NAME)
    30. - --v=6

    检查KubeProxy的Pod输出日志,如果apiserver地址是:169.254.2.1:10268代表修改成功。日志输出样例:

    1. I0521 02:57:02.021682 1 round_trippers.go:454] POST https://169.254.2.1:10268/api/v1/namespaces/default/events 201 Created in 4 milliseconds