目录

kubeadm 概念与实践

CKA考试

1.kubeadm知识图谱

Kubeadm是一个快速实现k8s环境的工具。 另外,您不需要关心配置环境,只需知道如何引导它即可。 掌握使用 kubeadm 的基本命令。

2.Kubeadm实践

2.1 练习环境

谷歌云实例 Linux系统。

2.2 环境配置

  • 安装容器(Docker)

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    
    # 安装 Docker CE
    ## 设置仓库
    ### 安装软件包以允许 apt 通过 HTTPS 使用存储库
    apt-get update && apt-get install \
    apt-transport-https ca-certificates curl software-properties-common
    
    ### 新增 Docker 的 官方 GPG 秘钥
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
    
    ### 添加 Docker apt 仓库
    add-apt-repository \
     "deb [arch=amd64] https://download.docker.com/linux/ubuntu \                             
         $(lsb_release -cs) \                                                                 
         stable"
    
    ## 安装 Docker CE
    apt-get update && apt-get install docker-ce=18.06.2~ce~3-0~ubuntu
    
    # 设置 daemon
    cat > /etc/docker/daemon.json <<EOF
    {
    "exec-opts": ["native.cgroupdriver=systemd"],
    "log-driver": "json-file",
    "log-opts": {
    "max-size": "100m"   
    },
    "storage-driver": "overlay2"
    }
    EOF
    mkdir -p /etc/systemd/system/docker.service.d
    
    # 重启 docker.
    systemctl daemon-reload
    systemctl restart docker
    
  • 安装 kubeadm、kubectl 和 kubelet

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    
    apt-get update && apt-get install -y apt-transport-https curl
    curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
    
    cat <<EOF >
    /etc/apt/sources.list.d/kubernetes.list
    deb https://apt.kubernetes.io/ kubernetes-xenial main
    EOF
    
    apt-get update
    
    apt-get install -y kubelet kubeadm kubectl
    apt-mark hold kubelet kubeadm kubectl
    

2.3 kubeadm 实践

背景:使用kubeadm创建k8s主节点,然后将其他节点循环到该主节点。

  • 初始化主节点。

    1
    
    kubeadm init --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=all
    

    pod-network-cidr,表示识别pod ip范围,我们也使用flannel网络设计方案。 忽略,表示忽略启动时的错误。 因为在启动kubeadm的时候,可能会碰到硬件不舒服。

  • 启动成功后,会生成kubeadm token,该token可以用来加入其他节点。 您可以使用以下命令来查看令牌。

    1
    
    kubeadm token list
    
  • 配置 kubectl。

    众所周知,kubectl是控制kubernetes集群的命令工具。 当我们切换到master节点时,我们需要配置kubectl。

    1
    2
    3
    4
    5
    
    mkdir -p $HOME/.kube
    cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    chown $(id -u):$(id -g) $HOME/.kube/config
    echo export KUBECONFIG=~/.kube/config>> ~/.bashrc
    source ~/.bashrc
    
  • 安装 Pod 网络插件。 安装 Pod 网络后,Pod 之间可以相互通信。 我们也使用flannel网络模式。

    1
    
    kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/2140ac876ef134e0ed5af15c65e414cf26827915/Documentation/kube-flannel.yml
    
  • 将其他节点加入集群。

    1
    
    sudo kubeadm join 10.128.0.2:6443 --token 5dhzcw.h7aih16mg982ms2o --discovery-token-ca-cert-hash sha256:e9e6843a6ae6fc5fb8acb9f116bc58d1c1e0f30d1da9bfe3bf151319c3788d57 --ignore-preflight-errors=all
    
  • 清理环境。 部署后,您可以清理环境。

    1
    
    sudo kubeadm reset
    

3.附加

事实上,当你按照步骤去做的时候,会出现很多问题。 未解决的问题:

  • 执行kubeadm join命令后,终端显示添加成功,但实际上节点列表中并不存在新节点。

    解决方案:我误解了kubeadm的概念,所以碰到了这个问题。 实际上,kubeadm 的目的是创建实现 k8s 环境,因此当您执行 kubeadm init 命令时,它会创建 kubenetes 主节点。 然后就可以将其他节点安排到这个主节点上。 所以我的解决方案是这样的。

    首先,创建一个新实例,然后在该实例中配置容器、kubectl、kubelet 和 kubeadm 工具。 之后,执行此命令。

    1
    
    kubeadm join --token 5dhzcw.h7aih16mg982ms2o 10.128.0.2:6443 --discovery-token-ca-cert-hash sha256:e9e6843a6ae6fc5fb8acb9f116bc58d1c1e0f30d1da9bfe3bf151319c3788d57 --ignore-preflight-errors=all
    

    当然,您必须是 root 角色。 结果如下。

  • 在节点机器中,当您执行命令“kubectl version”或“kubectl getnodes”时,会遇到此问题。

    您可以下载主节点“/etc/kubernetes/admin.conf”,然后将此文件复制到节点机器路径“/etc/kubernetes/”。 然后按照前面的步骤配置 kubectl。

4.参考链接