zoukankan      html  css  js  c++  java
  • Ubuntu 国内安装 kubernetes

    由于墙的原因,国内要安装 kubernetes 非常的麻烦,因此只要解决这个问题,就可以顺利安装 kubernetes 的 三个官方工具 kubelet、kubeadm、kubectl。

    安装环境:
    OS:Ubuntu 18.04.1

    1. 添加相应的源

      我在这里使用阿里源, 命令如下:

      sudo vim /etc/apt/sources.list.d/kubernetes.list
      
      # 将下面的阿里源加入文件中
      deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
      
      # 也可以选择中科大的源
      deb http://mirrors.ustc.edu.cn/kubernetes/apt kubernetes-xenial main
      
    2. 下载kubelet、kubeadm、kubectl

      这里先运行一下 apt udpate, 会报错,原因是缺少相应的key,可以通过下面的命令添加(E084DAB9 为上面报错的key后8位)

      gpg --keyserver keyserver.ubuntu.com --recv-keys E084DAB9
      gpg --export --armor E084DAB9 | sudo apt-key add -
      

      然后就可以正常下载了。

      apt-get update && apt-get install -y kubelet kubeadm kubectl
      
    3. 关闭swap

      如果不关闭kubernetes运行会出现错误, 即使安装成功了,node重启后也会出现kubernetes server运行错误。

      #暂时关闭,
      sudo swapoff -a 
      
      # 永久关闭
      sudo vim /etc/fstab
      注释掉swap那一行就行
      虚拟机最好把内存分配调整到2G以上,否则关掉swap会导致图形界面难以进入。
      
    4. 获取镜像

      由于官方镜像地址被墙,所以我们需要首先获取所需镜像以及它们的版本。然后从国内阿里的镜像站获取。

      kubeadm config images list
      

      获取镜像列表后可以通过下面的脚本从阿里云获取:

      images=(
      kube-apiserver:v1.13.4
      kube-controller-manager:v1.13.4
      kube-scheduler:v1.13.4
      kube-proxy:v1.13.4
      pause:3.1
      etcd:3.2.24
      coredns:1.2.6
      )
      for imageName in ${images[@]} ; do
              docker pull registry.aliyuncs.com/google_containers/$imageName
              docker tag registry.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName
              docker rmi registry.aliyuncs.com/google_containers/$imageName
      done
      
    5. 初始化环境

      如果上面的镜像都下载好了,这步就比较简单了,直接运行下面的命令就行了

      kubeadm init --apiserver-advertise-address 172.16.30.140 --pod-network-cidr=10.244.0.0/16
      
    6. 配置授权信息

      根据init成功后的提示命令进行。

      主要是为了保存相关的配置信息在用户目录下,这样不用每次都输入相关的认证信息。

      类似下面的命令,具体以你个人的提示为准

      mkdir -p $HOME/.kube
      sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
      sudo chown $(id -u):$(id -g) $HOME/.kube/config
      
    7. 保存添加Node的命令

      类似于

      kubeadm join 172.16.30.140:6443 --token aat409.plzb63oim93gjucq --discovery-token-ca-cert-hash sha256:5b906d68640eeddcd1381bf76dc0da5c522d71ceb89c547ac5a61fded064e54e
      

      这条命令一定保存好,因为后期没法重现的!!

    8. 删除node的命令:

      在master节点上执行:

      kubectl drain node1-k8s --delete-local-data --force --ignore-daemonsets
      kubectl delete node node1-k8s
      

      在节点上执行

      kubeadm reset
      
    9. 添加网络插件

      上面安装成功后如果通过查询kube-system下Pod的运行情况,会放下和网络相关的Pod都处于Pending的状态,这是因为缺少相关的网络插件,而网络插件有很多个(以下任选一个),可以选择自己需要的。

      • flannel

        需要在kubeadm init 时设置 --pod-network-cidr=10.244.0.0/16

        kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v0.10.0/Documentation/kube-flannel.yml
        
      • weave

        sysctl net.bridge.bridge-nf-call-iptables=1
        kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '
        ')"
        
      • calico

        需要 kubeadm init 时设置 --pod-network-cidr=192.168.0.0/16

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

        mkdir -p /etc/cni/net.d
        cat >/etc/cni/net.d/10-mynet.conf <<-EOF
        {
            "cniVersion": "0.3.0",
            "name": "mynet",
            "type": "bridge",
            "bridge": "cni0",
            "isGateway": true,
            "ipMasq": true,
            "ipam": {
                "type": "host-local",
                "subnet": "10.244.0.0/16",
                "routes": [
                    {"dst": "0.0.0.0/0"}
                ]
            }
        }
        EOF
        cat >/etc/cni/net.d/99-loopback.conf <<-EOF
        {
            "cniVersion": "0.3.0",
            "type": "loopback"
        }
        EOF
        
  • 相关阅读:
    Toolbar设置回退箭头的方法
    Android进程绝杀技--forceStop
    线程池的经典使用
    Handler+ExecutorService(线程池)+MessageQueue模式+缓存模式
    adb pull apk
    工厂模式_工厂方法模式
    工厂模式_简单工厂模式
    spring_aop
    代理模式_动态代理
    代理模式_静态代理
  • 原文地址:https://www.cnblogs.com/leisurelylicht/p/Ubuntu-guo-nei-an-zhuang-kubernetes.html
Copyright © 2011-2022 走看看