zoukankan      html  css  js  c++  java
  • Kubernetes安装

    前提:安装Docker、关闭SWAP分区、关闭防火墙、禁用禁用SELinux、CPU至少2核、自行查找文章科普Docker对应的Kubernetes版本

    一、准备工作

    a.配置国内kubernetes仓库源

    $ 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
    repo_gpgcheck=0
    gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
    

    b.修改 Docker cgroup 驱动,与Kubernetes一致,使用 systemd

    $ vim /etc/docker/daemon.json   ---添加以下配置,注意.json格式不要盲目Copy
    
    {
      "exec-opts": ["native.cgroupdriver=systemd"],
      "log-driver": "json-file",
      "log-opts": {
        "max-size": "100m"
      },
      "storage-driver": "overlay2",
      "storage-opts": [
        "overlay2.override_kernel_check=true"
      ]
    }
    
    $ systemctl daemon-reload   ---重新加载 daemon.json 文件
    
    $ systemctl restart docker ---重启Docker使配置生效
    

    c.修改 hosts

    $ vim /etc/hostname   ---将主机名加进去
    $ vim /etc/hosts   ---将主机IP和主机名加进去
    
    # 另外还要加一条应用Flannel网络的地址到 hosts 里
    
    # 199.232.68.133 raw.githubusercontent.com
    
    # 示例
    
    [root@master ~]$ cat /etc/hostname 
    master
    
    [root@master ~]$ cat /etc/hosts
    192.168.1.2  master
    199.232.68.133  raw.githubusercontent.com
    
    $ reboot   ---重启机器使上面 修改 hosts 生效
    

    二、安装

    # 安装Kubelet、Kubeadm、Kubectl,一定一定要注意版本!!!
    
    $ yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
    
    # 启动Kubelet和设置为开机自启
    
    $ systemctl enable kubelet && systemctl start kubelet
    

    三、设置路由(Centos 7需要)

    $ vim /etc/sysctl.d/k8s.conf   ---创建k8s.conf⽂件,添加以下配置
    
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    net.ipv4.ip_forward = 1
    
    $ yum install -y bridge-utils   ---安装 bridge-utils
    
    $ modprobe br_netfilter   ---加载br_netfilter模块,使用lsmod查看开启的模块
    
    $ sysctl -p /etc/sysctl.d/k8s.conf   ---重新加载 k8s.conf 配置文件
    或
    $ sysctl --system   ---重新加载所有配置文件
    

    四、拉取镜像

    # 列出所需镜像,需要自行上 hub.docker.com 上找对应的镜像拉取
    # 尽量不要和列出的镜像版本差距太大
    
    # Master端:
    
    $ kubeadm config images list   ---列出所需镜像,打标签时一定要对齐该命令给的版本
    
    # 如果你的网络足够好
    
    $ kubeadm config images pull   ---拉取集群所需镜像,这个需要FQ
    
    # 拉取镜像后需要对镜像重新打标签,注意对齐版本
    
    $ docker tag [原镜像名:原镜像版本] [k8s.gcr.io/镜像名:原镜像版本]
    
    # 示例
    
    $ docker tag xxx/kube-apiserver:v1.14.1 k8s.gcr.io/kube-apiserver:v1.14.1
    
    # Node端需要的镜像:kube-proxy、pause
    
    # 删除原有镜像(可选)
    

    五、初始化

    # 初始化Master此处会各种报错,自行翻译解决
    
    $ kubeadm init --apiserver-advertise-address 192.168.1.2 --pod-network-cidr 10.244.0.0/16 --kubernetes-version 1.2.3
    
    # --apiserver-advertise-address 指定与其它节点通信的接口
    
    # --pod-network-cidr 指定Pod网络子网,使用Fannel网络必须使用这个CIDR
    
    # --kubernetes-version 指定Kubernetes版本
    
    # 安装完后备份输出的 kubeadm join 两行命令,需要它来给集群添加节点
    

    六、按照提示执行命令

    # To start using your cluster, you need to run the following as a regular user
    
    $ mkdir -p $HOME/.kube
    
    $ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    
    $ sudo chown $(id -u):$(id -g) $HOME/.kube/config
    
    # 上面的命令不用改,Copy执行
    
    # You should now deploy a pod network to the cluster
    
    # 找个目录执行,下载的文件用下面的命令执行
    
    # 如果提示连接不上,请看本文准备工作的修改hosts 部分,检查 hosts 地址
    
    $ wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
    
    # 找到169和183行的镜像地址,改为你能拉取成功的镜像地址
    
    $ vim ./kube-flannel.yml   ---本文使用的是"easzlab/flannel:v0.13.0-amd64"镜像
    
    $ kubectl apply -f [上面下载的 kube-flannel.yml 文件]   ---应用Flannel网络
    
    $ kubectl get pods --all-namespaces   ---使kube-flannel处于Running状态
    
    $ cat ~/.kube/config   ---Kubelet默认配置文件,包含Master节点IP
    

    七、节点NotReady

    # 集群必须安装Pod网络插件,Pod才能相互通信
    # 只需在Master节点操作,新加入的节点会自动创建相关Pod
    # 须在任何应用程序之前部署网络组件,在安装网络前,CoreDNS将不会启动
    
    # 查看 CoreDNS 的状态是否 Running 状态
    
    $ kubectl get pods --all-namespaces|grep coredns
    
    # kubeadm 支持多种网络插件,这里选择 Calico 网络插件
    
    # 找个目录下载 calico.yaml
    
    $ wget https://docs.projectcalico.org/v3.8/manifests/calico.yaml
    
    $ vim calico.yaml   ---修改 calico.yaml 配置文件
    
    # 找到 625 行的 192.168.0.0/16
    # 修改为初始化时配置的"--pod-network-cidr"地址
    
    # 部署 Pod 网络组件
    
    $ kubectl apply -f calico.yaml
    
    # 用 watch 命令来实时查看 pod 的状态,包括Pod IP等信息
    
    $ watch -n 2 kubectl get pods --all-namespaces -o wide
    

    八、添加Node

    # 添加Node
    
    # 添加Worker节点同样要部署Docker和Kubeadm、Kubelet、kubectl
    
    # 添加Worker节点必要镜像:Kube-proxy、Pause、Flannel
    
    # Flannel镜像注意标签要与Master的"kube-flannel.yml"的一致
    
    $ kubeadm join [机器IP] --token...   ---token在部署成功时会提供一个,Copy接上即可
    
    # 示例
    
    $ kubeadm join 192.168.1.2:6443 --token edu7mp.1urvf9xxzsassaw6r 
        --discovery-token-ca-cert-hash sha256:5bffddcd0de6979cxczcsdsewqeqwesds4f4dbafc9fd2824805eb86f45
    
    $ journalctl -f   ---当前输出的日志
    
    $ journalctl -f -u kubelet   ---查看当前Kubelet进程的日志
    
    $ kubeadm token list   ---查看 token
    
    # 默认 token 有效期24小时,过期后该 token 就不可用了,需重新生成
    
    $ kubeadm token create   ---重新生成 token
    
    # 获取 CA 证书的 hash 值
    
    $ openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | 
                  openssl rsa -pubin -outform der 2>/dev/null | 
                  openssl dgst -sha256 -hex | sed 's/^.* //'
    
    # 在Woker节点查看Node报端口错?
    
    # [root@node-01 ~]# kubectl get nodes
    # The connection to the server localhost:8080 was refused - did you specify the right host or port?
    
    # 解决办法:将Master节点"~/.kube/config"文件的内容复制到Worker节点相同目录下
    # "~"是指你在初始化集群的用户 home 目录
    # Worker节点如果没有"~/.kube/config"则需要自行创建文件夹和文件
    

    九、本文使用的软件版本概览

    # 如果初始化集群失败了,使用以下命令重置
    
    $ kubeadm reset
    $ ifconfig cni0 down
    $ ip link delete cni0
    $ ifconfig flannel.1 down
    $ ip link delete flannel.1
    $ rm -rf /var/lib/cni/
    
    # Docker
    
    $ yum install -y docker-ce-18.09.5 
                   docker-ce-cli-18.09.0 
                   containerd.io-1.2.6
    
    # Kubernetes
    
    $ yum install -y kubelet-1.15.5 
                   kubeadm-1.15.5 
                   kubectl-1.15.5
    
    # 对应的镜像,镜像来自 hub.docker.com,可自行查找拉取
    
    docker pull mirrorgooglecontainers/kube-apiserver-amd64:v1.15.5
    docker pull mirrorgooglecontainers/kube-controller-manager:v1.15.3
    docker pull mirrorgooglecontainers/kube-scheduler:v1.15.3
    docker pull mirrorgooglecontainers/kube-proxy:v1.15.3
    docker pull mirrorgooglecontainers/pause:3.1
    docker pull mirrorgooglecontainers/etcd:3.3.10
    docker pull coredns/coredns:1.3.1
    
    docker tag mirrorgooglecontainers/kube-apiserver-amd64:v1.15.5 k8s.gcr.io/kube-apiserver:v1.15.5
    docker tag mirrorgooglecontainers/kube-controller-manager:v1.15.3 k8s.gcr.io/kube-controller-manager:v1.15.5
    docker tag mirrorgooglecontainers/kube-scheduler:v1.15.3 k8s.gcr.io/kube-scheduler:v1.15.5
    docker tag mirrorgooglecontainers/kube-proxy:v1.15.3 k8s.gcr.io/kube-proxy:v1.15.5
    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
    
    docker rmi mirrorgooglecontainers/kube-apiserver-amd64:v1.15.5
    docker rmi mirrorgooglecontainers/kube-controller-manager:v1.15.3
    docker rmi mirrorgooglecontainers/kube-scheduler:v1.15.3
    docker rmi mirrorgooglecontainers/kube-proxy:v1.15.3
    docker rmi mirrorgooglecontainers/pause:3.1
    docker rmi mirrorgooglecontainers/etcd:3.3.10
    docker rmi coredns/coredns:1.3.1
    

    十、文章贡献

    https://juejin.cn/post/6844903825485070344
    
    https://juejin.cn/post/6844903943051411469
    
    https://www.kubernetes.org.cn/7315.html
    
    https://cloud.tencent.com/developer/article/1525487
    
    https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/#instructions
    

    End...

  • 相关阅读:
    System.Web.Mvc.RoutePrefixAttribute.cs
    HTML5: 实现调用系统拍照或者选择照片并预览
    System.DateTime.cs
    System.Math.cs
    System.Web.UI.WebControls.FileUpload.cs
    系统过程分析
    java实现数字黑洞
    java实现数字黑洞
    java实现数字黑洞
    java实现数字黑洞
  • 原文地址:https://www.cnblogs.com/mrjiang-test/p/14053086.html
Copyright © 2011-2022 走看看