IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    Kubernetes Notes

    Lawrence发表于 2019-10-01 00:00:00
    love 0

    Kubernetes 中文概述(是什么以及不是什么)。

    实践时建议使用 kubectl 自动补全,极大提升交互效率。

    Pod

    Pod 是比容器更高一层次的抽象,同一 Pod 中的所有容器共享

    • 同一网络 namespace
    • 存储

    Controller

    • Deployment
    • ReplicaSet
    • DaemonSet
    • StatefulSet
    • Job

    Service

    是一个四层负载均衡器,为 Pod 提供负载均衡。

    MiniKube

    国内建议自定义镜像仓库,默认是 gcr.io ,似乎自带了 PV。

    minikube start --vm-driver=none --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers --cpus 4 --memory 6144
    

    感觉 Docker Desktop 内置的 Kubernetes 有点类似这个 minikube (master 可以直接运行 Pod,也就是单节点集群)。当然了,它们都只能用于开发/测试环境。

    Demo

    用 Spring Boot 创建了一个 HTTP 服务端,可以尝试用 Kubernetes 部署它。

    公网服务器集群初始化常用脚本

    cat <<EOF > /etc/yum.repos.d/kubernetes.repo
    [kubernetes]
    name=Kubernetes
    baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
    enabled=1
    gpgcheck=1
    repo_gpgcheck=1
    gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
    EOF
    
    yum install -y kubeadm-1.19.13-0 kubelet-1.19.13-0 kubectl-1.19.13-0
    
    kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.19.3
    
    kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.19.13 --apiserver-advertise-address $(hostname -i) --pod-network-cidr=10.96.0.0/16 --service-cidr=10.97.0.0/16
    
    mkdir -p $HOME/.kube
    cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    chown $(id -u):$(id -g) $HOME/.kube/config
    

    Flannel:

    wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml](https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml)
    
    kubectl apply -f kube-flannel.yaml
    

    运行 Master 作为 Node:

    kubectl taint node $HOSTNAME node-role.kubernetes.io/master-
    

    恢复 Master 不可调度:

    kubectl taint node $HOSTNAME node-role.kubernetes.io/master="":NoSchedule
    

    重置:

    kubeadm reset
    systemctl stop kubelet
    rm -rf /var/lib/cni/
    rm -rf /var/lib/etcd/
    rm -rf /var/lib/kubelet/
    rm -rf /etc/cni/
    rm -rf $HOME/.kube
    ifconfig cni0 down
    ifconfig flannel.1 down
    ifconfig docker0 down
    ip link delete cni0
    ip link delete flannel.1
    systemctl restart kubelet
    systemctl stop docker
    systemctl restart docker
    

    Pod 无法访问外网,尝试:

    iptables -P FORWARD ACCEPT
    iptables --flush
    iptables -tnat --flush
    
    iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
    // POD 无法访问外网络,但是可以互相 ping 或 ping 宿主。CIDR 为 POD CIDR
    // 有可能是 SNAT 时出了问题,使用动态 SNAT (即 MASQUERADE) 来配置 nat 表路由规则:
    iptables -t nat -I POSTROUTING -s 10.96.0.0/16 -j MASQUERADE
    // 再尝试重新运行 core dns 服务
    

    https://github.com/rancher/rancher/issues/6139

    https://github.com/coredns/coredns/issues/2693

    网络调试:使用 BusyBox:1.28.3,不建议使用 latest 镜像.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: busybox
      namespace: default
      labels:
        app: busybox
    spec:
      selector:
        matchLabels:
          app: busybox
      replicas: 1
      template:
        metadata:
          labels:
            app: busybox
        spec:
          containers:
            - name: busybox
              image: busybox:1.28.3
              command:
                - sleep
                - "3600"
              imagePullPolicy: IfNotPresent
          restartPolicy: Always
    

    基于 DNS 的服务发现: Kubernetes Service / Pod 对象资源可以使用集群内部 FQDN 来访问,而不需要在意其扁平空间中的 Cluster IP。 Core DNS 会将 FQDN 动态地指向最新的 Cluster IP。参考 Pod 与 Service 的 DNS:

    kubectl exec busybox -it -- nslookup kubernetes
    

    返回内容:

    Server:    10.97.0.10
    Address 1: 10.97.0.10 kube-dns.kube-system.svc.cluster.local
    
    Name:      kubernetes
    Address 1: 10.97.0.1 kubernetes.default.svc.cluster.local
    


沪ICP备19023445号-2号
友情链接