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
        
  • 相关阅读:
    基于Python的人脸动漫转换
    let 与 var的区别
    【LeetCode】汇总
    【HDU】4632 Palindrome subsequence(回文子串的个数)
    【算法】均匀的生成圆内的随机点
    【LeetCode】725. Split Linked List in Parts
    【LeetCode】445. Add Two Numbers II
    【LeetCode】437. Path Sum III
    【LeetCode】222. Count Complete Tree Nodes
    【LeetCode】124. Binary Tree Maximum Path Sum
  • 原文地址:https://www.cnblogs.com/leisurelylicht/p/Ubuntu-guo-nei-an-zhuang-kubernetes.html
Copyright © 2011-2022 走看看