zoukankan      html  css  js  c++  java
  • 安装kubernetes+docker集群,一篇文章搞定

    1. 安装docker

    1.1 前置工作

    master节点和worker节点上都需要进行下面的操作。

    # 关闭了防火墙,并取消了开机自启动。
    hadoop@master:sudo ufw disable
    #查看防火墙状态
    hadoop@master:sudo ufw status
    
    # 关闭selinux
    hadoop@master:sed -i 's/enforcing/disabled/' /etc/selinux/config  # 永久
    hadoop@master:setenforce 0  # 临时
    
    # 关闭swap分区
    hadoop@master:swapoff -a  # 临时
    hadoop@master:sed -ri 's/.*swap.*/#&/' /etc/fstab    # 永久
    #永久关闭swap分区的另一种方法
    hadoop@master:vim /etc/fstab
    打开fstab文件,注释掉有swap的那一行,然后保存
    

    1.2 安装

    master节点和worker节点上都需要进行下面的操作。

    我们要做的第一件事就是安装Docker。要安装docker,先要登录到Server上,输入并执行下面命令:

    #在docker库中进行安装
    hadoop@master:sudo apt-get install docker.io
    

    一旦docker安装成功后,你需要将你的账号添加到docker组中(否则,每次运行docker命令,都需要带上sudo,这可能导致安全问题)。执行下面命令将你的账号添加到docker组中:我这儿安全组是docker,用户是hadoop

    #添加至安全组
    hadoop@master:sudo usermod -aG docker hadoop
    #增加权限
    hadoop@master:sudo chmod a+rw /var/run/docker.sock
    #重启docker服务
    hadoop@master:sudo systemctl restart docker.service
    

    登出并重新登录,这样上述配置变化才能生效。

    启动并使docker后台驻留程序:

    hadoop@master:sudo systemctl start docker
    hadoop@master:sudo systemctl enable docker
    #验证
    hadoop@master:/etc/docker$ docker --version
    Docker version 19.03.6, build 369ce74a3c
    

    参考链接:https://blog.csdn.net/u013948858/article/details/78429954

    1.3 修改docker镜像源

    master节点和worker节点上都需要进行下面的操作。

    安裝好Docker后接下去便是开心的玩乐了,但是具体情况并不愉快

    由于docker的默认设置镜像源国外,由于中国独特的互联网缘故浏览起來通常比较慢或是彻底浏览不上,幸亏中国有相近的镜像源能够应用。

    国内亲测可用的几个镜像源:

    Docker 官方中国区:https://registry.docker-cn.com
    网易:http://hub-mirror.c.163.com
    中国科技大学:https://docker.mirrors.ustc.edu.cn
    阿里云:https://y0qd3iq.mirror.aliyuncs.com

    增加Docker的镜像源配置文件 /etc/docker/daemon.json,如果没有配置过镜像该文件默认是不存的,在其中增加如下内容:

    hadoop@master:sudo touch /etc/docker/daemon.json
    hadoop@master:sudo vim /etc/docker/daemon.json
    #加入以下内容,并保存 ESC -> : -> wq!
    {
      "registry-mirrors": ["https://y0qd3iq.mirror.aliyuncs.com"]
    }
    
    

    其中的URL就是指定的镜像源,可以将其设置为上面说的四个镜像源中的任何一个。

    然后重启Docker服务:

    hadoop@master:sudo systemctl restart docker.service
    

    然后通过以下命令查看配置是否生效:

    hadoop@master:docker info|grep Mirrors -A 1
    

    可以看到如下的输出:

    hadoop@master:/etc/docker$ docker info|grep Mirrors -A 1
    WARNING: No swap limit support
     Registry Mirrors:
      https://y0qd3iq.mirror.aliyuncs.com/
    #另一种验证docker镜像源是否更改成功的办法,因为前面已经把hadoop用户加入到docker组,所以这里可以直接用docker,而不用加sudo了
    hadoop@master:/etc/docker$ docker info
     Operating System: Ubuntu 18.04.5 LTS
     OSType: linux
     Architecture: x86_64
     CPUs: 4
     Total Memory: 7.526GiB
     Name: master
     ID: 5WNN:EZRK:ZE5Y:ZJRZ:QHN6:KY2Q:QXYQ:LZG3:BI6U:FZIW:7HA6:KY3Y
     Docker Root Dir: /var/lib/docker
     Debug Mode: false
     Registry: https://index.docker.io/v1/
     Labels:
     Experimental: false
     Insecure Registries:
      127.0.0.0/8
     Registry Mirrors:
      https://y0qd3iq.mirror.aliyuncs.com/
     Live Restore Enabled: false
    WARNING: No swap limit support
    

    就表示镜像配置成功,然后再执行docker pull操作,就会很快了。

    参考链接:https://blog.csdn.net/fenglibing/article/details/92090925

    另一种更改docker镜像源的方法:

    https://blog.csdn.net/u011483658/article/details/95012034?utm_medium=distribute.pc_relevant_t0.none-task-blog-2~default~BlogCommendFromMachineLearnPai2~default-1.control&dist_request_id=1328740.40197.16170147553043935&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2~default~BlogCommendFromMachineLearnPai2~default-1.control

    1.4 补充

    • 启动docker service
    hadoop@master:sudo systemctl enable docker
    hadoop@master:sudo systemctl start docker
    hadoop@master:sudo systemctl status docker
    

    2. 安装K8S

    2.1 安装kubeadm,kubelet和kubectl

    阿里源 安装 kubelet kubeadm kubectl (master和node都需要)

    # 安装依赖
    hadoop@master:sudo apt-get update && apt-get install -y apt-transport-https
    # 加载key
    hadoop@master:sudo curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add - 
    # 添加源
    hadoop@master:sudo touch /etc/apt/sources.list.d/kubernetes.list
    加入下面这句话,并保存退出
    deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
    # 安装
    hadoop@master:sudo apt-get update
    hadoop@master:sudo apt-get install -y kubelet kubeadm kubectl
    

    关闭swap(交换区)和防火墙,否则会启动失败

    sudo swapoff -a
    

    上面命令是临时关闭交换区(立即生效),我们还需要永久关闭交换区,

    vim /etc/fstab
    

    打开fstab文件,注释掉有swap的那一行,然后保存

    修改cgroupfs,否则会报错

    打开如下文件

    sudo vim /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
    

    增加--cgroup-driver=cgroupfs

    重启kubelet

    hadoop@master:sudo systemctl daemon-reload
    
    hadoop@master:sudo systemctl restart kubelet 
    

    2.2 部署Kubernetes Master

    在master节点执行

    在master节点执行init

    hadoop@master:kubeadm init --apiserver-advertise-address=172.28.51.190 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.20.5 --service-cidr=10.1.0.0/16 --pod-network-cidr=10.244.0.0/16
    # pod-network-cidr是指配置节点中的pod的可用IP地址,此为内部IP
    
    # apiserver-advertise-address 为master的IP地址
    
    # kubernetes-version 通过kubectl version 可以查看到
    
    

    由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址。

    在master节点初始化后,会出现下图所示,记得把红线内的内容先复制下来,这个不可照搬我的,每个人都不一样

    使用kubectl工具:

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

    2.3 加入Kubernetes Node

    向集群添加新节点,将提示给的最后一行join命令记下来,然后在各个node节点执行。

    hadoop@node:sudo kubeadm join 172.28.51.190:6443 --token mjunhb.z6022bi50abpb3f6  --discovery-token-ca-cert-hash sha256:dbc7b12a9862097bb99288acab06c539eaeed62e179d2f10df20b471be5346d4 
    

    2.4 部署CNI网络插件

    安装flannel,这是k8s必须的一个插件,国外源无法直接下载(master和node都需要),sed命令修改为docker hub镜像仓库。

    hadoop@master:wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
    # 修改docker镜像地址
    hadoop@master:sed 's/quay.io/coreos/registry.cn-beijing.aliyuncs.com/imcto/g'
    # 安装flannel
    hadoop@master:sudo kubectl apply -f kube-flannel.yml
    

    如果实在下载不了,按照我下一篇博客,解决部署K8S集群时flannel无法下载问题进行操作。

    2.5 验证,测试集群

    查看node是否已经加入到k8s集群中(需要等一段时间才能ready):

    #Running状态
    hadoop@master:$ kubectl get pods -n kube-system
    NAME                          READY   STATUS    RESTARTS   AGE
    kube-flannel-ds-amd64-2pc95   1/1     Running   0          72s
    #Ready状态
    hadoop@master:$ kubectl get nods
    NAME     STATUS     ROLES                  AGE   VERSION
    master   Ready   control-plane,master   88m   v1.20.5
    slave1   Ready   <none>                 14m   v1.20.5
    slave2   Ready   <none>                 14m   v1.20.5
    slave3   Ready   <none>                 14m   v1.20.5
    

    在Kubernetes集群中创建一个pod,验证是否正常运行:

    hadoop@master:~$ kubectl get nodes
    NAME     STATUS   ROLES                  AGE   VERSION
    master   Ready    control-plane,master   12h   v1.20.5
    slave1   Ready    <none>                 11h   v1.20.5
    slave2   Ready    <none>                 11h   v1.20.5
    slave3   Ready    <none>                 11h   v1.20.5
    hadoop@master:~$ kubectl get pods -n kube-system
    NAME                             READY   STATUS    RESTARTS   AGE
    coredns-7f89b7bc75-j6mtv         1/1     Running   1          12h
    coredns-7f89b7bc75-lc96q         1/1     Running   1          12h
    etcd-master                      1/1     Running   1          12h
    kube-apiserver-master            1/1     Running   1          12h
    kube-controller-manager-master   1/1     Running   1          11h
    kube-flannel-ds-amd64-6d24v      1/1     Running   1          10h
    kube-flannel-ds-amd64-b7jzx      1/1     Running   1          10h
    kube-flannel-ds-amd64-gkt8h      1/1     Running   1          10h
    kube-flannel-ds-amd64-zg6dl      1/1     Running   1          10h
    kube-proxy-4pgl9                 1/1     Running   1          12h
    kube-proxy-8v8d7                 1/1     Running   1          11h
    kube-proxy-rjfx2                 1/1     Running   1          11h
    kube-proxy-zx2kr                 1/1     Running   1          11h
    kube-scheduler-master            1/1     Running   1          11h
    hadoop@master:~$ kubectl create deployment nginx --image=nginx
    deployment.apps/nginx created
    hadoop@master:~$ kubectl expose deployment nginx --port=80 --type=NodePort
    service/nginx exposed
    hadoop@master:~$ kubectl get pod,svc
    NAME                         READY   STATUS    RESTARTS   AGE
    pod/nginx-6799fc88d8-w9zmt   1/1     Running   0          69s
    
    NAME                 TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
    service/kubernetes   ClusterIP   10.1.0.1       <none>        443/TCP        12h
    service/nginx        NodePort    10.1.234.254   <none>        80:32568/TCP   17s
    

    访问地址:http://NodeIP:Port

    我用的是阿里云服务器,其中,这里输入的是node节点而不是master节点的公网IP,port是上图中红线处

    参考链接:https://zhuanlan.zhihu.com/p/148386967?utm_source=wechat_timeline

    2.6 补充

    拷贝配置文件到每个node:

    scp /etc/kubernetes/admin.conf ubuntu@node1:/home/ubuntu/
    scp /home/ubuntu/k8s/kube-flannel.yml ubuntu@node1:/home/ubuntu/
    

    重启kubelet

    hadoop@master:sudo systemctl enable kubelet
    hadoop@master:sudo systemctl start kubelet
    

    查看节点状态

    kubectl get nodes
    

    查看k8s版本

    kubectl version
    
  • 相关阅读:
    【转】B树以及B+树的区别
    epoll 笔记
    HTTP 请求的读取和分析
    获取指定网页的所有链接
    Python爬取表情包
    Python重命名文件夹下的文件(包含子文件夹下的文件)
    BeautifulSoup根据class的属性查找标签的方法
    群聊斗神
    Python简单的下载图片
    Python 记录一个坑
  • 原文地址:https://www.cnblogs.com/wanpi/p/14595410.html
Copyright © 2011-2022 走看看