上一回讲了我们可以使用kubeadm一键部署kubernetes,这一回就开始实际操作一下,搭建的过程中也踩了不少坑,爬出来后又重新整理了下,有序操作,可能会好一些,为了方便,本案例都是以root身份运行

1.环境准备:

    192.168.1.10    master        centos7        2CPU        7.5G
    192.168.1.20    slave01        centos7        2CPU        7.5G

2.配置yum源(master, slave01)


    

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo  


    #注意:此处docker版本一定要高,此处docker版本为18
  

 vim /etc/yum.repos.d/docker.repo  
        [docker-ce-stable]
        name=Docker CE Stable - $basearch
        baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/$basearch/stable
        enabled=1
        gpgcheck=0
vim /etc/yum.repos.d/kubernetes.repo 
        [kubernetes]
        name=kubernetes
        baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
        enabled=1
        gpgcheck=0

3.安装并启动kubeadm和docker(master, slave01)
    

yum -y install docker-ce kubeadm
systemctl restart docker
systemctl enable docker 
systemctl enable kubelet


    不要启动,若在此处启动,则kubeadm init会报10250端口被占用,开机自启即可,因为待会kubeadm init初始化时会启动


4.准备海外一台云服务器,安装docker,下载k8s所需要的镜像,并打包下载到本地,导入到images中


    此处我用的是kubernetes1.14.3版本比较新,所以,对应的docker版本也一定要高,否则kubeadm init会不成功
    云服务器:
        

         docker pull k8s.gcr.io/kube-apiserver:v1.14.3
         docker pull k8s.gcr.io/kube-controller-manager:v1.14.3
         docker pull k8s.gcr.io/kube-scheduler:v1.14.3
         docker pull k8s.gcr.io/kube-proxy:v1.14.3
         docker pull k8s.gcr.io/pause:3.1
         docker pull k8s.gcr.io/etcd:3.3.10
         docker pull k8s.gcr.io/coredns:1.3.1
         mkdir k8s
         cd k8s
         docker save k8s.gcr.io/pause:3.1 > pause:3.1
         docker save k8s.gcr.io/etcd:3.3.10 > etcd:3.3.10
         docker save k8s.gcr.io/coredns:1.3.1 > coredns:1.3.1
         docker save k8s.gcr.io/kube-scheduler:v1.14.3 > kube-scheduler:v1.14.3
         docker save k8s.gcr.io/kube-apiserver:v1.14.3 > kube-apiserver:v1.14.3
         docker save k8s.gcr.io/kube-controller-manager:v1.14.3 > kube-controller-manager:v1.14.3
         docker save k8s.gcr.io/kube-proxy:v1.14.3 > kube-proxy:v1.14.3
         cd ..
         tar -zcf k8s.tar.gz k8s
    本地操作(master,slave01都要导入):
        scp 云服务IP:/root/k8s.tar.gz .
        tar -xf k8s.tar.gz
        cd k8s
        for i in *
        do
            docker load < $i
        done
        docker images # 需要用到的7个镜像就准备好了


5.初始化配置k8s (master)
    

kubeadm init --pod-network-cidr 10.244.0.0/16


    1.此处报错,说驱动不一致,修改docker驱动为systemd,docker高版本驱动都是cgroupfs,需要和kubeadm改成一致
        

vim /etc/docker/daemon.json
            {
              "exec-opts": ["native.cgroupdriver=systemd"]
            }
systemctl restart docker 
systemctl enable docker 
kubeadm init --pod-network-cidr 10.244.0.0/16 


    2.执行成功,会提示创建目录等操作;初始化命令执行成功后,执行如下的命令,启动集群,并将kubeadm join命令拷贝到文件中,以备后用。
        

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


    3.获取组件的健康状态
 

        kubectl get cs
            NAME                 STATUS    MESSAGE             ERROR
            scheduler            Healthy   ok                  
            controller-manager   Healthy   ok                  
            etcd-0               Healthy   {"health":"true"}


    4.查看节点信息
 

        kubectl get nodes
            NAME     STATUS     ROLES    AGE   VERSION
            master   NotReady   master   11m   v1.14.3


    5.这里status未就绪,是因为没有网络插件,如flannel.可以查看flannel在github上的相关项目,执行如下的命令自动安装flannel
        

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml


    6.执行完上述命令后,会拉取flannel的镜像,时间会比较长;网络插件安装好后,nodes状态就改变了
 

        kubectl get nodes
            NAME     STATUS   ROLES    AGE   VERSION
            master   Ready    master   14m   v1.14.3


    7.获取当前系统上所有在运行的pod的状态,指定名称空间为kube-system,为系统级的pod
 

         kubectl get pods -n kube-system
             NAME                             READY   STATUS    RESTARTS   AGE
            coredns-fb8b8dccf-qkbvl          1/1     Running   0          105s
            coredns-fb8b8dccf-znz92          1/1     Running   0          105s
            etcd-master                      1/1     Running   0          66s
            kube-apiserver-master            1/1     Running   0          44s
            kube-controller-manager-master   1/1     Running   0          48s
            kube-flannel-ds-amd64-xs5kf      1/1     Running   0          62s
            kube-proxy-lg5gl                 1/1     Running   0          105s
            kube-scheduler-master            1/1     Running   0          62s


    8.获取当前系统的名称空间

        kubectl get ns
            NAME              STATUS   AGE
            default           Active   16m
            kube-node-lease   Active   16m
            kube-public       Active   16m
            kube-system       Active   16m


6.slave01客户端配置:


    1.安装docker和kubeadm软件包,并启动服务
 

        yum -y install docker-ce kubeadm 
        echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
        echo 1 > /proc/sys/net/ipv4/ip_forward
        echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
        systemctl enable kubelet
        systemctl start docker
        systemctl enable docker 


    2.把配置文件拷贝到要加入该master节点的node上,保持配置一致。(master)
 

        scp /etc/sysconfig/kubelet slave01:/etc/sysconfig/kubelet
        scp /usr/lib/systemd/system/docker.service slave01:/usr/lib/systemd/system/


    3.将slave01添加到集群中
 

        vim /etc/docker/daemon.json
            {
              "exec-opts": ["native.cgroupdriver=systemd"]
            }
        systemctl restart docker 
        systemctl enable docker 
        kubeadm join master的IP:6443 --token adiqlr.xxxx --discovery-token-ca-cert-hash sha256:xxx


        看到This node has joined the cluster即可,slave01配置完成。
    4.此时需要等待一会儿,因为slave01也要下载flannel镜像启动


7.验证(master):

    kubectl get pods -n kube-system -o wide  #可以看到有俩pod在slave01上
    kubectl get nodes # 都是ready即可 

以上操作,就实现了kubernetes的搭建,下一回继续扩展一些功能以及pod的使用

07-14 19:13