k8s(十一)安装K8s集群之注意事项

153 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第11天,点击查看活动详情

  1. 重置kubeadm安装状态

    kubeadm reset
    ​
    rm -fr  $HOME/.kube/config
    
  2. 在执行kubeadm init后,节点处于NotReady,这是符合预期的。

    使用kubectl describe node master即可查看master节点信息,他会告诉我们network plugin is not ready: cni config uninitialized

    因为没有安装网络,所有DNS服务一起起不来,安装网络服务即可(这里是flannel)。

    [root@master kubeadm_init]# kubectl get pods --all-namespaces
    NAMESPACE     NAME                             READY   STATUS    RESTARTS        AGE
    kube-system   coredns-6d8c4cb4d-2fbpp          0/1     Pending   0               2m40s
    kube-system   coredns-6d8c4cb4d-g8jzg          0/1     Pending   0               2m40s
    kube-system   etcd-master                      1/1     Running   1 (6m23s ago)   3m2s
    kube-system   kube-apiserver-master            1/1     Running   1 (6m32s ago)   2m58s
    kube-system   kube-controller-manager-master   1/1     Running   1 (3m26s ago)   2m55s
    kube-system   kube-proxy-tdz44                 1/1     Running   0               2m40s
    kube-system   kube-scheduler-master            1/1     Running   1 (3m53s ago)   2m59s
    ​
    # 安装flannel后
    [root@master kubeadm_init]# kubectl get pods --all-namespaces
    NAMESPACE     NAME                             READY   STATUS    RESTARTS        AGE
    kube-system   coredns-6d8c4cb4d-2fbpp          1/1     Running   0               8m48s
    kube-system   coredns-6d8c4cb4d-g8jzg          1/1     Running   0               8m48s
    kube-system   etcd-master                      1/1     Running   1 (12m ago)     9m10s
    kube-system   kube-apiserver-master            1/1     Running   1 (12m ago)     9m6s
    kube-system   kube-controller-manager-master   1/1     Running   1 (9m34s ago)   9m3s
    kube-system   kube-flannel-ds-7gm8n            1/1     Running   0               57s
    kube-system   kube-proxy-tdz44                 1/1     Running   0               8m48s
    kube-system   kube-scheduler-master            1/1     Running   1 (10m ago)     9m7s 
    

    1)获取flannel:wget raw.githubusercontent.com/coreos/flan…

    2)获取镜像:grep image kube-flannel.yml

    [root@maste k8s]# grep image kube-flannel.yml
           #image: flannelcni/flannel-cni-plugin:v1.0.1 for ppc64le and mips64le (dockerhub limitations may apply)
            image: rancher/mirrored-flannelcni-flannel-cni-plugin:v1.0.1
           #image: flannelcni/flannel:v0.17.0 for ppc64le and mips64le (dockerhub limitations may apply)
            image: rancher/mirrored-flannelcni-flannel:v0.17.0
           #image: flannelcni/flannel:v0.17.0 for ppc64le and mips64le (dockerhub limitations may apply)  
    

    3)Master:kubecetl create -f kube-flannel.yml

    4)Node:

    crictl pull flannelcni/flannel-cni-plugin:v1.0.1
    crictl pull flannelcni/flannel:v0.17.0
    
  1. Master节点执行systemctl enable --now kubelet后,kubelet可能会起不来,等kubeadm init执行成功后,就会自动起来了。

  2. 让node节点使用kubectl命令行工具

    mkdir -p $HOME/.kube
    scp master:/$HOME/.kube/config $HOME/.kube/config
    ​
    chown $(id -u):$(id -g) $HOME/.kube/config
    ​
    mkdir -p $HOME/.kube
    scp master:/etc/kubernetes/admin.conf $HOME/.kube/config
    ​
    chown $(id -u):$(id -g) $HOME/.kube/config
    
  3. 如果想要可视化,这里有两种方法

    • 使用dashboard

      kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-rc6/aio/deploy/recommended.yaml
      
    • 使用lens (推荐)

  4. 阿里云ecs里没有配置公网ip,etcd无法启动,所以kubeadm在初始化会出现”timeout“的错误

    解决办法就是给你的服务器版定一个公网ip。

  5. 想要优雅的使用k命令,而不每次都输入kubectl。可以在每次ssh连接后执行

    function k() {
        cmdline=`HISTTIMEFORMAT="" history | awk '$2 == "kubectl" && (/-n/ || /--namespace/) {for(i=2;i<=NF;i++)printf("%s ",$i);print ""}' | tail -n 1`
        regs=('-n [\w-\d]+' '-n=[\w-\d]+' '--namespace [\w-\d]+' '--namespace=[\w-\d]+')
        for i in "${!regs[@]}"; do
            reg=${regs[i]}
            nsarg=`echo $cmdline | grep -o -P "$reg"`
            if [[ "$nsarg" == "" ]]; then
                continue
            fi
            cmd="kubectl $nsarg $@"
            echo "$cmd"
            $cmd
            return
        done
        cmd="kubectl $@"
        echo "$cmd"
        $cmd
    }
    

    如果不想要每次都手动执行可以设置为ssh登陆后自动执行: 编辑 ~/.bashrc

    if [[ -n $SSH_CONNECTION ]] ; then
        function k() {
        cmdline=`HISTTIMEFORMAT="" history | awk '$2 == "kubectl" && (/-n/ || /--namespace/) {for(i=2;i<=NF;i++)printf("%s ",$i);print ""}' | tail -n 1`
        regs=('-n [\w-\d]+' '-n=[\w-\d]+' '--namespace [\w-\d]+' '--namespace=[\w-\d]+')
        for i in "${!regs[@]}"; do
            reg=${regs[i]}
            nsarg=`echo $cmdline | grep -o -P "$reg"`
            if [[ "$nsarg" == "" ]]; then
                continue
            fi
            cmd="kubectl $nsarg $@"
            echo "$cmd"
            $cmd
            return
        done
        cmd="kubectl $@"
        echo "$cmd"
        $cmd
    }
    fi