关于我们

质量为本、客户为根、勇于拼搏、务实创新

新闻公告

< 返回新闻公共列表

Kubernetes 1.8.4中如何安装Kube-proxy和Kube-dns

发布时间:2022-03-16 17:18:13

Kube-proxy

      Kube-proxy 是实现 Service 的关键组件,kube-proxy 会在每台节点上执行,然后监听 API Server 的 Service 与 Endpoint 资源对象的改变,然后来依据变化执行 iptables 来实现网络的转发。这边我们会需要建议一个 DaemonSet 来执行,并且创建一些需要的certificate。Kubernetes 1.8 kube-proxy 开启 ipvs。

  • 在master生成kube-proxy-csr.json文件,并产生 kube-proxy certificate 证书
    生成kube-proxy-csr.json文件

    cd /etc/kubernetes/pki


    cat <<EOF > kube-proxy-csr.json
    {
        "CN": "system:kube-proxy",
        "key": {
            "algo": "rsa",
            "size": 2048
        },
        "names": [
            {
                "C": "SC",
                "ST": "ChengDu",
                "L": "ChengDu",
                "O": "system:kube-proxy",
                "OU": "Kubernetes-manual"
            }
        ]
    }
    EOF


    生成证书

    cfssl gencert \
      -ca=ca.pem \
      -ca-key=ca-key.pem \
      -config=ca-config.json \
      -profile=kubernetes \
      kube-proxy-csr.json | cfssljson -bare kube-proxy


    生成名称为 kube-proxy.conf 的 kubeconfig文件

    # kube-proxy set-cluster
    kubectl config set-cluster kubernetes \
        --certificate-authority=ca.pem \
        --embed-certs=true \
        --server="https://10.0.0.162:6443" \
        --kubeconfig=../kube-proxy.conf
    
    # kube-proxy set-credentials
     kubectl config set-credentials system:kube-proxy \
        --client-key=kube-proxy-key.pem \
        --client-certificate=kube-proxy.pem \
        --embed-certs=true \
        --kubeconfig=../kube-proxy.conf
    
    # kube-proxy set-context
    kubectl config set-context system:kube-proxy@kubernetes \
        --cluster=kubernetes \
        --user=system:kube-proxy \
        --kubeconfig=../kube-proxy.conf
    
    # kube-proxy set default context
    kubectl config use-context system:kube-proxy@kubernetes \
        --kubeconfig=../kube-proxy.conf


    在master将kube-proxy相关文件复制到 Node 节点上

    cd /etc/kubernetes


    for NODE in node163 node164; do
        for FILE in pki/kube-proxy.pem pki/kube-proxy-key.pem kube-proxy.conf; do
          scp /etc/kubernetes/${FILE} ${NODE}:/etc/kubernetes/${FILE}
        done
      done


    完成后,在master通过 kubectl 来创建 kube-proxy daemon

    mkdir -p /etc/kubernetes/addons && cd /etc/kubernetes/addons


    生成kube-proxy.yml

    cat <<EOF > kube-proxy.yml
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: kube-proxy
      labels:
        k8s-app: kube-proxy
        kubernetes.io/cluster-service: "true"
        addonmanager.kubernetes.io/mode: Reconcile
      namespace: kube-system
    ---
    apiVersion: extensions/v1beta1
    kind: DaemonSet
    metadata:
      name: kube-proxy
      labels:
        k8s-app: kube-proxy
        kubernetes.io/cluster-service: "true"
        addonmanager.kubernetes.io/mode: Reconcile
      namespace: kube-system
    spec:
      selector:
        matchLabels:
          k8s-app: kube-proxy
      templateGeneration: 1
      updateStrategy:
        rollingUpdate:
          maxUnavailable: 1
        type: RollingUpdate
      template:
        metadata:
          labels:
            k8s-app: kube-proxy
          annotations:
            scheduler.alpha.kubernetes.io/critical-pod: ''
        spec:
          serviceAccountName: kube-proxy
          hostNetwork: true
          containers:
          - name: kube-proxy
            image: registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy-amd64:v1.8.4
            command:
            - kube-proxy
            - --v=0
            - --logtostderr=true
            - --kubeconfig=/run/kube-proxy.conf
            - --cluster-cidr=10.244.0.0/16
            - --proxy-mode=iptables
            imagePullPolicy: IfNotPresent
            securityContext:
              privileged: true
            volumeMounts:
            - mountPath: /run/kube-proxy.conf
              name: kubeconfig
              readOnly: true
            - mountPath: /etc/kubernetes/pki
              name: k8s-certs
              readOnly: true
          dnsPolicy: ClusterFirst
          restartPolicy: Always
          terminationGracePeriodSeconds: 30
          volumes:
          - hostPath:
              path: /etc/kubernetes/kube-proxy.conf
              type: FileOrCreate
            name: kubeconfig
          - hostPath:
              path: /etc/kubernetes/pki
              type: DirectoryOrCreate
            name: k8s-certs
    EOF


    kubectl apply -f kube-proxy.yml


    查看状态

    kubectl -n kube-system get po -l k8s-app=kube-proxy


     

Kube-dns 

      Kube DNS 是 Kubernetes 集群内部 Pod 之间互相沟通的重要 Addon,它允许 Pod 可以通过 Domain Name 方式来连接 Service,其主要由 Kube DNS 与 Sky DNS 组合而成,通过 Kube DNS 监听 Service 与 Endpoint 变化,来提供给 Sky DNS 信息,已更新解析地址。

       只需要在master通过 kubectl 来创建 kube-dns deployment 即可

cat <<EOF > kube-dns.yml
apiVersion: v1
kind: ServiceAccount
metadata:
  name: kube-dns
  labels:
    k8s-app: kube-dns
    kubernetes.io/cluster-service: "true"
    addonmanager.kubernetes.io/mode: Reconcile
  namespace: kube-system
---
apiVersion: v1
kind: Service
metadata:
  name: kube-dns
  namespace: kube-system
  labels:
    k8s-app: kube-dns
    kubernetes.io/cluster-service: "true"
    addonmanager.kubernetes.io/mode: Reconcile
spec:
  selector:
    k8s-app: kube-dns
  clusterIP: 10.96.0.10
  ports:
  - name: dns
    port: 53
    protocol: UDP
  - name: dns-tcp
    port: 53
    protocol: TCP
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: kube-dns
  namespace: kube-system
  labels:
    k8s-app: kube-dns
    kubernetes.io/cluster-service: "true"
    addonmanager.kubernetes.io/mode: Reconcile
spec:
  strategy:
    rollingUpdate:
      maxSurge: 10%
      maxUnavailable: 0
  selector:
    matchLabels:
      k8s-app: kube-dns
  template:
    metadata:
      labels:
        k8s-app: kube-dns
      annotations:
        scheduler.alpha.kubernetes.io/critical-pod: ''
    spec:
      dnsPolicy: Default
      serviceAccountName: kube-dns
      tolerations:
      - key: "CriticalAddonsOnly"
        operator: "Exists"
      - key: node-role.kubernetes.io/master
        effect: NoSchedule
      volumes:
      - name: kube-dns-config
        configMap:
          name: kube-dns
          optional: true
      containers:
      - name: kubedns
        image: registry.cn-hangzhou.aliyuncs.com/google_containers/k8s-dns-kube-dns-amd64:1.14.7
        resources:
          limits:
            memory: 170Mi
          requests:
            cpu: 100m
            memory: 70Mi
        livenessProbe:
          httpGet:
            path: /healthcheck/kubedns
            port: 10054
            scheme: HTTP
          initialDelaySeconds: 60
          timeoutSeconds: 5
          successThreshold: 1
          failureThreshold: 5
        readinessProbe:
          httpGet:
            path: /readiness
            port: 8081
            scheme: HTTP
          initialDelaySeconds: 3
          timeoutSeconds: 5
        args:
        - "--domain=cluster.local"
        - --dns-port=10053
        - --v=2
        env:
        - name: PROMETHEUS_PORT
          value: "10055"
        ports:
        - containerPort: 10053
          name: dns-local
          protocol: UDP
        - containerPort: 10053
          name: dns-tcp-local
          protocol: TCP
        - containerPort: 10055
          name: metrics
          protocol: TCP
        volumeMounts:
        - name: kube-dns-config
          mountPath: /kube-dns-config
      - name: dnsmasq
        image: registry.cn-hangzhou.aliyuncs.com/google_containers/k8s-dns-dnsmasq-nanny-amd64:1.14.7
        livenessProbe:
          httpGet:
            path: /healthcheck/dnsmasq
            port: 10054
            scheme: HTTP
          initialDelaySeconds: 60
          timeoutSeconds: 5
          successThreshold: 1
          failureThreshold: 5
        args:
        - "-v=2"
        - "-logtostderr"
        - "-configDir=/etc/k8s/dns/dnsmasq-nanny"
        - "-restartDnsmasq=true"
        - "--"
        - "-k"
        - "--cache-size=1000"
        - "--log-facility=-"
        - "--server=/cluster.local/127.0.0.1#10053"
        - "--server=/in-addr.arpa/127.0.0.1#10053"
        - "--server=/ip6.arpa/127.0.0.1#10053"
        ports:
        - containerPort: 53
          name: dns
          protocol: UDP
        - containerPort: 53
          name: dns-tcp
          protocol: TCP
        resources:
          requests:
            cpu: 150m
            memory: 20Mi
        volumeMounts:
        - name: kube-dns-config
          mountPath: /etc/k8s/dns/dnsmasq-nanny
      - name: sidecar
        image: registry.cn-hangzhou.aliyuncs.com/google_containers/k8s-dns-sidecar-amd64:1.14.7
        livenessProbe:
          httpGet:
            path: /metrics
            port: 10054
            scheme: HTTP
          initialDelaySeconds: 60
          timeoutSeconds: 5
          successThreshold: 1
          failureThreshold: 5
        args:
        - "--v=2"
        - "--logtostderr"
        - "--probe=kubedns,127.0.0.1:10053,kubernetes.default.svc.cluster.local,5,A"
        - "--probe=dnsmasq,127.0.0.1:53,kubernetes.default.svc.cluster.local,5,A"
        ports:
        - containerPort: 10054
          name: metrics
          protocol: TCP
        resources:
          requests:
            memory: 20Mi
            cpu: 10m
EOF
kubectl apply -f kube-dns.yml

查看状态

kubectl -n kube-system get po -l k8s-app=kube-dns

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:leidianyun@qq.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

/template/Home/ZdsjuX168/PC/Static

网站通知

尊敬的雷电云用户,您好:

雷电云停止运营,仅保留域名续费!

雷电云停止运营,仅保留域名续费雷电云停止运营,仅保留域名续费
雷电云停止运营,仅保留域名续费雷电云停止运营,仅保留域名续费

我知道了