zoukankan      html  css  js  c++  java
  • Ubuntu下搭建Kubernetes集群(3)--k8s部署

    1. 关闭swap并关闭防火墙

    首先,我们需要先关闭swap和防火墙,否则在安装Kubernetes时会导致不成功:

    # 临时关闭
    swapoff -a
    
    # 编辑/etc/fstab,注释掉包含swap的那一行即可,重启后可永久关闭
    
    ufw disable
    

    2.配置阿里源

    sudo echo "deb http://mirrors.ustc.edu.cn/kubernetes/apt kubernetes-xenial main" > /etc/apt/sources.list.d/kubernetes.list
    

    然后更新下:

    sudo apt update
    

    如果遇到以下问题:

    可以记下提示的PUBKEY的最后8位,这里是BA07F4FB,然后执行:

    gpg --keyserver keyserver.ubuntu.com --recv-keys BA07F4FB
    gpg --export --armor BA07F4FB | sudo apt-key add -
    sudo apt-get update
    

    3. 安装组件

    sudo apt install -y kubelet kubeadm kubectl
    sudo apt-mark hold kubelet kubeadm kubectl #确保不会被自动更新
    

    4. 配置kubelet的cgroup drive

    需要确保kubelet的cgroup drive在docker的一致。
    分别可以通过以下命令查看:

    docker info | grep -i cgroup
    
    cat /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
    

    若显示不一样,则添加或修改Environment="KUBELET_CGROUP_ARGS=--cgroup-dirver=cgroupfs"

    systemctl daemon-reload
    systemctl restart kubelet
    

    5. 启动kubelet

    systemctl enable kubelet && systemctl start kubelet
    

    6. 下载K8S的Docker镜像

    /etc/apt/sources.list中添加阿里源:

    
    deb http://mirrors.aliyun.com/ubuntu/ xenial main
    deb-src http://mirrors.aliyun.com/ubuntu/ xenial main
     
    deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main
    deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main
     
    deb http://mirrors.aliyun.com/ubuntu/ xenial universe
    deb-src http://mirrors.aliyun.com/ubuntu/ xenial universe
    deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe
    deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates universe
     
    deb http://mirrors.aliyun.com/ubuntu/ xenial-security main
    deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main
    deb http://mirrors.aliyun.com/ubuntu/ xenial-security universe
    deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security universe
    

    sudo apt update更新下源。

    首先使用kubeadm config images list显示我们需要下载的镜像。
    uploading-image-472461.png

    然后从mirrorgooglecontainers上把这些镜像都拉下来,以免在初始化的时候从k8s.gcr.io拉取:

    docker pull mirrorgooglecontainers/kube-apiserver:v1.14.2
    docker pull mirrorgooglecontainers/kube-controller-manager:v1.14.2
    docker pull mirrorgooglecontainers/kube-scheduler:v1.14.2
    docker pull mirrorgooglecontainers/kube-proxy:v1.14.2
    docker pull mirrorgooglecontainers/pause:3.1
    docker pull mirrorgooglecontainers/etcd:3.3.10
    docker pull coredns/coredns:1.3.1
    
    

    具体版本请自行修改。

    然后修改tag成k8s执行init检查的镜像:

    
    docker tag mirrorgooglecontainers/kube-apiserver:v1.14.2 k8s.gcr.io/kube-apiserver:v1.14.2
    docker tag mirrorgooglecontainers/kube-controller-manager:v1.14.2 k8s.gcr.io/kube-controller-manager:v1.14.2
    docker tag mirrorgooglecontainers/kube-scheduler:v1.14.2 k8s.gcr.io/kube-scheduler:v1.14.2
    docker tag mirrorgooglecontainers/kube-proxy:v1.14.2 k8s.gcr.io/kube-proxy:v1.14.2
    docker tag mirrorgooglecontainers/pause:3.1 k8s.gcr.io/pause:3.1
    docker tag mirrorgooglecontainers/etcd:3.3.10 k8s.gcr.io/etcd:3.3.10
    docker tag coredns/coredns:1.3.1 k8s.gcr.io/coredns:1.3.1
    

    注意,至此基础的组件都安装完成,接下来要根据是master节点还是普通node节点来分别配置。

    7. master节点配置

    在master节点上运行:

    kubeadm init --pod-network-cidr=10.0.0.0/24 --kubernetes-version=v1.14.2 --apiserver-advertise-address=10.0.2.15
    

    注意:

    pod-network-cidr: 选项--pod-network-cidr=10.0.0.0/24表示集群将使用网络的子网范围;
    
    选项--kubernetes-version=v1.14.2指定K8S版本,必须和前面导入的镜像一致。
    
    选项--apiserver-advertise-address表示绑定的网卡IP,这里是指定所用网络的网卡。
    
    若执行kubeadm init出错或强制终止,则再需要执行该命令时,需要先执行kubeadm reset重置。
    
    

    执行成功后,它提示还需要执行:

    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config
    

    此外最后还会提示其他节点加入集群时的命令:

    kubeadm join 10.0.2.15:6443 --token zuhiop.bmxq2jofv1j68o9o 
        --discovery-token-ca-cert-hash sha256:b65ca09d1f18ef0af3ded2c831c609dfe48b19c5dc53a8398af5b735603828fb
    

    不过需要注意的是这里的token值24小时后会失效,因此,当以后还想加入节点时,可以先用kubeadm token list命令查看当前的token表,并在master节点上执行openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'来查看hash。

    此时我们查看网络状态kubectl get pod -n kube-system,可以发现都处于Pending阻塞状态,此时,我们需要配置网络,直接使用Calico,即执行:

    kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/installation/hosted/rbac-kdd.yaml
    kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/installation/hosted/kubernetes-datastore/calico-networking/1.7/calico.yaml
    
    

    (注意这里也是有版本号的,如果不是很清楚是多少,可以直接访问官网获取最新的进行尝试:https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/)

    过段时间,再执行kubectl get pod -n kube-system就会发现都处于running状态了。

    最后将master设为工作节点:

    kubectl taint nodes --all node-role.kubernetes.io/master-
    

    执行成功时会显示

    node/xl-virtualbox untainted
    

    对于mater至此配置成功,可以使用kubectl get nodes命令查看节点状态。当然目前只有一个master节点。

    8.普通工作节点

    对于普通的node节点,只需执行:

    kubeadm join 10.0.2.15:6443 --token zuhiop.bmxq2jofv1j68o9o 
        --discovery-token-ca-cert-hash sha256:b65ca09d1f18ef0af3ded2c831c609dfe48b19c5dc53a8398af5b735603828fb
    

    就可以了。

    如果此时在master节点上使用kubectl get nodes查看节点的状态时'NotReady',请在对应主机上重启docker服务即可:

     systemctl restart docker
    

    最后,可以看到两个节点都能正常工作了:

    PS:
    为了每台节点显示名称不一样,最好是给每个节点设置不同的hostname,可以通过以下命令修改:

    hostnamectl set-hostname new-name
    
  • 相关阅读:
    微信小程序@bindgetuserinfo @bindgetphonenumber
    报错总结
    前端面试题
    关于vue ssr next服务端渲染
    【012】JavaSE面试题(十二):多线程(2)
    【011】JavaSE面试题(十一):多线程(1)
    [010]
    [009]
    [008]
    添加Lombok插件后调用Setter或Getter方法IDEA编译错误
  • 原文地址:https://www.cnblogs.com/xl2432/p/10933022.html
Copyright © 2011-2022 走看看