• kubeadm安装kubernetes集群


    kubeadm安装kubernetes集群:

    kubernetes

    是:master/node 架构
    
    master上运行:API server ,Scheduler,Controller-Manager etcd
    node上运行:kebelet,容器引擎(例docker) ,kube-proxy ,flannel(网路)
    

    Pod:

    自主式Pod
    控制器管理的Pod
    

    kubernetes安装方法:

    1)传统的方式安装,让k8s自己的组件运行为系统级的守护进程,这种方式安装复杂,需要好多ca的证书,配置文件需要手动解决,相当复杂。
    
    2)简单部署方法,依靠kubeadm官方提供的安装工具
    
        注意:每个节点包括master都要安装docker,kubelet,并运行
        
        实现自我管理的方式,把k8s自己也部署为pod。而master也需要安装flannel,来连接node节点。
    

    kubeadm 安装kubernetes

    环境:
        master: etcd: 192.168.44.165
        node01:         192.168.44.166
        node02:         192.168.44.167
        
    前提:
        1.基于主机名通信:/etc/hosts
        2.时间同步
        3.关闭firewalld和iptables,selinux
        OS:centos 7
        
    安装步骤:
        1.etcd cluster,仅master节点
        2.flannel,集群所有节点包括master节点
        3.配置k8s的master:仅master节点
            kubernetes-master
            启动的服务:
                kube-apiserver,kube-scheduler,kube-controller-manager
        4.配置k8s的各node节点
            kubernetes-node
            
            先设定启动docker服务
            启动k8s的服务:
                kube-proxy, kubelet
    

    kubeadm(安装步骤)

    1.master,node:安装kubelet,kubeadm,docker
    2.master:kubeadm init  (生成ca证书等)
    3.个节点nodes:kubeadm join (加入集群
    

    开始安装:

    修改主机名 
    
        192.168.44.177  ---> master
        192.168.44.178  ---> node01
        192.168.44.176  ---> node02
    修改host文件各个节点:
        vim /etc/hosts
            192.168.44.177 master
            192.168.44.178 node01
            192.168.44.176 node02
    注:要关闭防火墙和selinux及同步时间
    
        selinux 永久关闭:sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config 
    
    所有节点都安装一下:
        阿里云的镜像
        docker的yum源
        cd /etc/yum.repos.d/
        wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
        编辑kubernetes的yum仓库,也是阿里的镜像
        vim kubernetes.repo
        [kubernetes]
        name=kubernetes Repo
        baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
        gpgcheck=1  #检查
        pgpkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg  #检查的key
        enabled=1
        
        然后保存退出执行
        yum repolist
        
        安装ssh密钥登陆
        在master执行:
        ssh-keygen -t rsa#一路回车
        ssh-copy-id node01 (node02) #将密钥复制到各个node节点
        
        安装
        yum install docker-ce kubelet kubeadm kubectl -y 
        
        如不能连接docker仓库,可以配置docker代理例www.ik8s.io 是可以的配置如下:
        vim /usr/lib/systemd/system/docker.service
            
            [Unit]
            Description=Docker Application Container Engine
            Documentation=https://docs.docker.com
            BindsTo=containerd.service
            After=network-online.target firewalld.service
            Wants=network-online.target
            Requires=docker.socket
            
            [Service]
            Type=notify
            # the default is not to use systemd for cgroups because the delegate issues still
            # exists and systemd currently does not support the cgroup feature set required
            # for containers run by docker
            Environment="HTTPS_PROXY=http://www.ik8s.io:10080"#配置的代理
            Environment="NO_PROXY=127.0.0.1/8,192.168.44.0/24"#配置不让自己代理
            ExecStart=/usr/bin/dockerd -H fd://
            ExecReload=/bin/kill -s HUP $MAINPID
            
        执行:
        
            systemctl daemon-reload
        启动docker
            
            systemctl start docker
            systemctl status docker            
        修改这两个文件,确保是1 可以先cat查看。(因为docker会生成大量的iptables规则,有可能对iptables内部的call和ip6有影响,所以要打开桥接功能)
            
            echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
            echo 1 > /proc/sys/net/bridge/bridge-nf-call-ip6tables
            
        查看安装的软件:
            
            rpm -ql kubelet
                /etc/kubernetes/manifests #清单目录
                /etc/sysconfig/kubelet #配置文件
                /etc/systemd/system/kubelet.service #
                /usr/bin/kubelet #注程序
        注:早期的k8s是必须关闭swap的交换分区(关闭命令:swapoff -a  开启命令:sqapon  -a,永久关闭需要:修改/etc/fstab中内容,将swap哪一行用#注释掉)
    

    初始化master:(在master执行执行)

    只需要将其设置成开机自启就可以不用专门启动
    systemctl  enable  docker
    systemctl  enable  kubelet
    
    如不关闭swap可以配置忽略swap和指定ipvs模式
    支持lvs模型	  
      
    vim /etc/sysconfig/kubelet
    KUBELET_EXTRA_ARGS="--fail-swap-on=false" #关闭swap
    KUBE_PROXY_MODE=ipvs #支持ipvs
    
    然后安装ipvs模块
    ip_vs  ip_vs_rr  ip_vs_wrr  ip_vs_sh  nf_conntrack_ipv4
    
    
    如没有ipvs模块
    
    
    cat > /etc/sysconfig/modules/ipvs.modules <<EOF
    #!/bin/bash
    modprobe -- ip_vs
    modprobe -- ip_vs_rr
    modprobe -- ip_vs_wrr
    modprobe -- ip_vs_sh
    modprobe -- nf_conntrack_ipv4
    EOF
    chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4
    
    初始化安装就支持ipvs
    
    
    初始化:
    
    
        kubeadm version #查看版本
            kubeadm version: &version.Info{Major:"1", Minor:"13", GitVersion:"v1.13.3", GitCommit:"721bfa751924da8d1680787490c54b9179b1fed0", GitTreeState:"clean", BuildDate:"2019-02-01T20:05:53Z", GoVersion:"go1.11.5", Compiler:"gc", Platform:"linux/amd64"}
    
    
        kubeadm init --kubernetes-version=v1.13.3 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --ignore-preflight-errors=Swap
        
        --kubernetes-version        #指定k8s版本
        --pod-network-cid           #指定pod网路
        --service-cidr              #指定service的我网路
        --ignore-preflight-errors   #忽略swap
        
                [init] Using Kubernetes version: v1.13.3
                [preflight] Running pre-flight checks
                	[WARNING Swap]: running with swap on is not supported. Please disable swap
                	[WARNING SystemVerification]: this Docker version is not on the list of validated versions: 18.09.2. Latest validated version: 18.06
                [preflight] Pulling images required for setting up a Kubernetes cluster
                [preflight] This might take a minute or two, depending on the speed of your internet connection
                [preflight] You can also perform this action in beforehand using 'kubeadm config images pull'
                error execution phase preflight: [preflight] Some fatal errors occurred:
                	[ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-apiserver:v1.13.3: output: Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
                , error: exit status 1
                	[ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-controller-manager:v1.13.3: output: Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
                , error: exit status 1
                	[ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-scheduler:v1.13.3: output: Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
                , error: exit status 1
                	[ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-proxy:v1.13.3: output: Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
                , error: exit status 1
                	[ERROR ImagePull]: failed to pull image k8s.gcr.io/pause:3.1: output: Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
                , error: exit status 1
                	[ERROR ImagePull]: failed to pull image k8s.gcr.io/etcd:3.2.24: output: Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
                , error: exit status 1
                	[ERROR ImagePull]: failed to pull image k8s.gcr.io/coredns:1.2.6: output: Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
                , error: exit status 1
                
        
    报错是因为不能连接k8s.gcr.io地址可以下载好上传上去,我这里写了个脚本doker  pull
    
            vim image.sh
                #!/bin/bash
    
                echo ""
                echo "Pulling Docker Images from mirrorgooglecontainers..."
                
                echo "==>kube-apiserver:"
                docker pull mirrorgooglecontainers/kube-apiserver:v1.13.3
                docker tag mirrorgooglecontainers/kube-apiserver:v1.13.3 k8s.gcr.io/kube-apiserver:v1.13.3
                
                echo "==>kube-controller-manager:"
                docker pull mirrorgooglecontainers/kube-controller-manager:v1.13.3
                docker tag mirrorgooglecontainers/kube-controller-manager:v1.13.3 k8s.gcr.io/kube-controller-manager:v1.13.3
                
                echo "==>kube-scheduler:"
                docker pull mirrorgooglecontainers/kube-scheduler:v1.13.3
                docker tag mirrorgooglecontainers/kube-scheduler:v1.13.3 k8s.gcr.io/kube-scheduler:v1.13.3
                
                echo "==>kube-proxy:"
                docker pull mirrorgooglecontainers/kube-proxy:v1.13.3
                docker tag mirrorgooglecontainers/kube-proxy:v1.13.3 k8s.gcr.io/kube-proxy:v1.13.3
                
                
                echo "==>etcd:"
                docker pull mirrorgooglecontainers/etcd:3.2.24
                docker tag mirrorgooglecontainers/etcd:3.2.24 k8s.gcr.io/etcd:3.2.24
                
                echo "==>pause:"
                docker pull mirrorgooglecontainers/pause:3.1
                docker tag mirrorgooglecontainers/pause:3.1 k8s.gcr.io/pause:3.1
                
                echo "==>coredns:"
                docker pull coredns/coredns
                docker tag coredns/coredns k8s.gcr.io/coredns:1.2.6
                
                echo "==>docker rmi mirrorgooglecontainers..."
                docker rmi coredns/coredns
                docker rmi mirrorgooglecontainers/etcd:3.2.24
                docker rmi mirrorgooglecontainers/pause:3.1
                docker rmi mirrorgooglecontainers/kube-proxy:v1.13.3
                docker rmi mirrorgooglecontainers/kube-scheduler:v1.13.3
                docker rmi mirrorgooglecontainers/kube-controller-manager:v1.13.3
                docker rmi mirrorgooglecontainers/kube-apiserver:v1.13.3	
    

    查看pull下来的镜像:

        docker images
        
        REPOSITORY                           TAG                 IMAGE ID            CREATED             SIZE
        k8s.gcr.io/kube-apiserver            v1.13.3             fe242e556a99        3 weeks ago         181MB
        k8s.gcr.io/kube-controller-manager   v1.13.3             0482f6400933        3 weeks ago         146MB
        k8s.gcr.io/kube-proxy                v1.13.3             98db19758ad4        3 weeks ago         80.3MB
        k8s.gcr.io/kube-scheduler            v1.13.3             3a6f709e97a0        3 weeks ago         79.6MB
        coredns/coredns                      latest              eb516548c180        6 weeks ago         40.3MB
        k8s.gcr.io/coredns                   1.2.6               eb516548c180        6 weeks ago         40.3MB
        k8s.gcr.io/etcd                      3.2.24              3cab8e1b9802        5 months ago        220MB
        k8s.gcr.io/pause                     3.1                 da86e6ba6ca1        14 months ago       742kB
    
    在执行初始化命令:
    
        kubeadm init --kubernetes-version=v1.13.3 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --ignore-preflight-errors=Swap
        
        
        可以加参数 --apiserver-advertise-address=master——ip 指定master的ip地址
    
    
    出现一下说明初始化成功:
    
                [addons] Applied essential addon: CoreDNS
                [addons] Applied essential addon: kube-proxy
                
                Your Kubernetes master has initialized successfully! #master已经初始化成功后
                
                To start using your cluster, you need to run the following as a regular user:  #为了启动一个集群,最好是用一个普通用户需要执行一下命令(我这为了方便就直接用root用户执行了),
                
                  mkdir -p $HOME/.kube
                  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
                  sudo chown $(id -u):$(id -g) $HOME/.kube/config
                
                You should now deploy a pod network to the cluster.
                Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
                  https://kubernetes.io/docs/concepts/cluster-administration/addons/
                
                You can now join any number of machines by running the following on each node
                as root: #有root用户在其他node节点执行一下命令将其加入到kuberntes集群(注:token 和--discovery-token-ca-cert-hash的参数要记住方便以后有节点加入集群)
                
                  kubeadm join 192.168.44.177:6443 --token p50b8j.9ot6yuxc11zvrwcs --discovery-token-ca-cert-hash sha256:a2ceffc9a67763cb98ca7fd23fc2d93ea5370a9007620214d5e098b1874ba75b
    
        执行初始化侯的命令
        
            [root@master ~]# mkdir -p $HOME/.kube
            [root@master ~]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
            [root@master ~]# chown $(id -u):$(id -g) $HOME/.kube/config
            
        用kubectl查看汲取状态
        
        [root@master ~]# kubectl get componentstatus(或kubectl  get cs)
        NAME                 STATUS    MESSAGE              ERROR
        controller-manager   Healthy   ok                   
        scheduler            Healthy   ok                   
        etcd-0               Healthy   {"health": "true"} 
        
        查看节点命令:kubectl get nodes
        
        查看命名空间
       
            [root@master ~]# kubectl get ns (看到有三个命名空间其中系统及的pod在kube-system里)
            NAME          STATUS   AGE
            default       Active   38m
            kube-public   Active   38m
            kube-system   Active   38m
        
                
    安装flannel 网址:https://github.com/coreos/flannel执行一下命令:
    
        [root@master ~]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
        podsecuritypolicy.extensions/psp.flannel.unprivileged created
        clusterrole.rbac.authorization.k8s.io/flannel created
        clusterrolebinding.rbac.authorization.k8s.io/flannel created
        serviceaccount/flannel created
        configmap/kube-flannel-cfg created
        daemonset.extensions/kube-flannel-ds-amd64 created
        daemonset.extensions/kube-flannel-ds-arm64 created
        daemonset.extensions/kube-flannel-ds-arm created
        daemonset.extensions/kube-flannel-ds-ppc64le created
        daemonset.extensions/kube-flannel-ds-s390x created
        
    
        查看flanel是否运行(也可以docker images 查看你flanel的镜像是否下载成功)
        
        [root@master ~]# kubectl get pods -n kube-system
        NAME                             READY   STATUS    RESTARTS   AGE
        coredns-86c58d9df4-hq6db         1/1     Running   0          40m
        coredns-86c58d9df4-p7xgr         1/1     Running   0          40m
        etcd-master                      1/1     Running   0          39m
        kube-apiserver-master            1/1     Running   0          39m
        kube-controller-manager-master   1/1     Running   0          39m
        kube-flannel-ds-amd64-6fqw6      1/1     Running   0          5m6s
        kube-proxy-mwqsz                 1/1     Running   0          40m
        kube-scheduler-master            1/1     Running   0          39m
    

    node节点操作:

    首先关闭防火前和selinux 
    安装:
    docker的yum源
    编辑kubernetes的yum仓库,也是阿里的镜像
    可以将mster上的yum源和docker获取镜像的脚本复制到给个节点:
    
        scp docker_image.sh node02:/root
        scp docker_image.sh node01:/root
        scp docker-ce.repo kubernetes.repo  node01:/etc/yum.repos.d/
        scp docker-ce.repo kubernetes.repo  node02:/etc/yum.repos.d/
        
    执行:yum repolist
    
    安装相关命令
    
    yum install docker-ce kubelet kubeadm kubectl -y (node节点可以不安装kubelet)
    
    启动docker将其设置成开机自启就kubelet可以不用专门启动
    systemctl start  docker
    systemctl  enable  docker
    systemctl  enable  kubelet
    
    执行:
    
        sh  docker_image.sh (来获取镜像)
    
    如不关闭swap可以配置忽略swap
    
        vim /etc/sysconfig/kubelet
        KUBELET_EXTRA_ARGS="--fail-swap-on=false"
        
    将节点加入到集群(执行master初始化侯的命令如:没有关闭swap 就要加入--ignore-preflight-errors=Swap参数)
    
        kubeadm join 192.168.44.177:6443 --token p50b8j.9ot6yuxc11zvrwcs --discovery-token-ca-cert-hash sha256:a2ceffc9a67763cb98ca7fd23fc2d93ea5370a9007620214d5e098b1874ba75b --ignore-preflight-errors=Swap
        
        注:如不能下载flannel 可将master上的镜像导入到node节点上
    

    各个几点执行完以上命令并加入到集群

    master查看nodes
    
        [root@master yum.repos.d]# kubectl get nodes
        NAME     STATUS   ROLES    AGE    VERSION
        master   Ready    master   79m    v1.13.3
        node01   Ready    <none>   15m    v1.13.3
        node02   Ready    <none>   106s   v1.13.3
        
                
    master查看kube-prox和falene的运行情况   
        [root@master yum.repos.d]# kubectl get pods -n kube-system -o wide
        NAME                             READY   STATUS    RESTARTS   AGE   IP               NODE     NOMINATED NODE   READINESS GATES
        coredns-86c58d9df4-hq6db         1/1     Running   0          78m   10.244.0.3       master   <none>           <none>
        coredns-86c58d9df4-p7xgr         1/1     Running   0          78m   10.244.0.2       master   <none>           <none>
        etcd-master                      1/1     Running   0          77m   192.168.44.177   master   <none>           <none>
        kube-apiserver-master            1/1     Running   0          77m   192.168.44.177   master   <none>           <none>
        kube-controller-manager-master   1/1     Running   0          77m   192.168.44.177   master   <none>           <none>
        kube-flannel-ds-amd64-6fqw6      1/1     Running   0          43m   192.168.44.177   master   <none>           <none>
        kube-flannel-ds-amd64-hn29s      1/1     Running   0          14m   192.168.44.178   node01   <none>           <none>
        kube-flannel-ds-amd64-tds62      1/1     Running   0          56s   192.168.44.176   node02   <none>           <none>
        kube-proxy-4ppd9                 1/1     Running   0          56s   192.168.44.176   node02   <none>           <none>
        kube-proxy-bpjm8                 1/1     Running   0          14m   192.168.44.178   node01   <none>           <none>
        kube-proxy-mwqsz                 1/1     Running   0          78m   192.168.44.177   master   <none>           <none>
        kube-scheduler-master            1/1     Running   0          77m   192.168.44.177   master   <none>           <none>
        
    node节点执行命令查看镜像的运行情况
    
            docker image ls
            REPOSITORY                           TAG                 IMAGE ID            CREATED             SIZE
            k8s.gcr.io/kube-apiserver            v1.13.3             fe242e556a99        4 weeks ago         181MB
            k8s.gcr.io/kube-controller-manager   v1.13.3             0482f6400933        4 weeks ago         146MB
            k8s.gcr.io/kube-proxy                v1.13.3             98db19758ad4        4 weeks ago         80.3MB
            k8s.gcr.io/kube-scheduler            v1.13.3             3a6f709e97a0        4 weeks ago         79.6MB
            quay.io/coreos/flannel               v0.11.0-amd64       ff281650a721        4 weeks ago         52.6MB
            k8s.gcr.io/coredns                   1.2.6               eb516548c180        6 weeks ago         40.3MB
            k8s.gcr.io/etcd                      3.2.24              3cab8e1b9802        5 months ago        220MB
            k8s.gcr.io/pause                     3.1                 da86e6ba6ca1        14 months ago       742kB
    

    到此k8s集群安装完成

  • 相关阅读:
    论知识共享平台
    网虫推荐firefox 4.0插件
    solaris下常见文件压缩/解压方式简单小结—待续中
    Nginx的启动,关闭,重启脚本
    怎样将oracle数据库用户锁住和解锁
    【APACHE】如何重启Apache?
    【MYSQL】解决Mysql直接登录问题(删除匿名用户)
    【PHP】关于set和get函数
    【JMAIL】jmail无法收邮件问题
    【PHP】Class ‘mysqli’ not found 问题
  • 原文地址:https://www.cnblogs.com/houchaoying/p/14185477.html
Copyright © 2020-2023  润新知