kops 在 aws 部署 K8S 集群

初始化环境

  1. 安装 kops, kubectl, aws-cli:

关于 kops 与 k8s 的对应版本说明: For example, kops 1.8.0 does not support Kubernetes 1.9.2, but kops 1.9.0 supports Kubernetes 1.9.2 and previous Kubernetes versions.

wget https://github.com/kubernetes/kops/releases/download/1.12.3/kops-linux-amd64
chmod +x ./kops
mv ./kops /usr/local/bin/
  • kubectl

    wget https://dl.k8s.io/v1.12.10/kubernetes-client-linux-amd64.tar.gz
    gzip -d kubernetes-client-linux-amd64.tar.gz
    chmod +x ./kubectl
    mv ./kubectl /usr/local/bin/kubectl
    
  • aws cli tool

    pip install awscli
    
  1. 准备 aws 账号

  2. 创建 S3 (用于保存 kops stats 文件

  3. 配置环境变量:

    export AWS_ACCESS_KEY_ID=
    export AWS_SECRET_ACCESS_KEY=
    export AWS_REGION=
    export NAME=
    export KOPS_STATE_STORE=
    export VPC_NAME=
    export SUBNET_NAME=
    
  4. 准备 kops 安装依赖二进制文件与校验文件:

    这里我使用 nginx 作为 webserver 提供数据下载服务,其中在 aws 上公网 80/443 服务 (即使在安全组策略已经开通的情况下,依然不能正常访问 telnet x.x.x.x 80 未响应, 使用了一个高位端口):

    asset
    ├── download.sh
    ├── kops
    │   └── 1.12.3
    │       ├── darwin
    │       │   └── amd64
    │       │       ├── kops
    │       │       └── kops.sha1
    │       ├── images
    │       │   ├── protokube.tar.gz
    │       │   └── protokube.tar.gz.sha1
    │       ├── linux
    │       │   └── amd64
    │       │       ├── kops
    │       │       ├── kops.sha1
    │       │       ├── nodeup
    │       │       ├── nodeup.sha1
    │       │       ├── utils.tar.gz
    │       │       └── utils.tar.gz.sha1
    │       └── windows
    │           └── amd64
    │               ├── kops
    │               └── kops.sha1
    └── kubernetes-release
        ├── network-plugins
        │   ├── cni-plugins-amd64-v0.6.0.tgz
        │   ├── cni-plugins-amd64-v0.6.0.tgz.sha1
        │   ├── cni-plugins-amd64-v0.7.5.tgz
        │   └── cni-plugins-amd64-v0.7.5.tgz.sha1
        └── release
            └── v1.12.9
                └── bin
                    └── linux
                        └── amd64
                            ├── kube-apiserver.docker_tag
                            ├── kube-apiserver.tar
                            ├── kube-apiserver.tar.sha1
                            ├── kube-controller-manager.docker_tag
                            ├── kube-controller-manager.tar
                            ├── kube-controller-manager.tar.sha1
                            ├── kube-proxy.docker_tag
                            ├── kube-proxy.tar
                            ├── kube-proxy.tar.sha1
                            ├── kube-scheduler.docker_tag
                            ├── kube-scheduler.tar
                            ├── kube-scheduler.tar.sha1
                            ├── kubectl
                            ├── kubectl.sha1
                            ├── kubelet
                            └── kubelet.sha1
    
  5. 准备镜像仓库::

    node:
    protokube                1.12.3              dd37681076e1        2 weeks ago         295MB
    k8s.gcr.io/kube-proxy    v1.12.8             18d31d4ba9ad        3 months ago        95.7MB
    k8s.gcr.io/pause-amd64   3.0                 99e59f495ffa        3 years ago         747kB
    
    master:
    REPOSITORY                           TAG                 IMAGE ID            CREATED             SIZE
    protokube                            1.12.3              dd37681076e1        2 weeks ago         295MB
    quay.io/calico/node                  v3.7.4              84b65b552a8f        7 weeks ago         155MB
    quay.io/calico/cni                   v3.7.4              203668d151b2        7 weeks ago         135MB
    k8s.gcr.io/kube-apiserver            v1.12.8             dab16944dfce        3 months ago        194MB
    k8s.gcr.io/kube-controller-manager   v1.12.8             6ccd44dc061f        3 months ago        164MB
    k8s.gcr.io/kube-scheduler            v1.12.8             c09febff85d6        3 months ago        58.4MB
    k8s.gcr.io/pause-amd64               3.0                 99e59f495ffa        3 years ago         747kB
    kopeio/etcd-manager                  3.0.20190801        720955e04498        49 years ago        655MB
    

集群操作

  1. kops 初始化 k8s cluster:

     kops create cluster --name=${NAME} \
                      --image=ami-05f26f4d887c6de6e \
                      --zones=cn-north-1a \
                      --master-count=1 \
                      --master-size="t2.small" \
                      --node-count=1 \
                      --node-size="t2.micro" \
                      --vpc=${VPC_NAME}
                      --networking=flannel \
                      --ssh-public-key="~/.ssh/id_rsa.pub" \
                      --subnets=${SUBNET_NAME} \
                      -v 5 \
                      --kubernetes-version="https://s3.cn-north-1.amazonaws.com.cn/kubernetes-release/release/${K8S-VERSION}"
    
  2. 修改 kops 参数:

    kops edit cluster ${NAME}

    编辑配置文件,添加前面准备的镜像仓库与文件仓库地址:

    spec:
      assets:
        containerRegistry: 镜像仓库地址
        fileRepository: 文件仓库地址( 可以为 http / https URL,根据日志上显示 由管理端的 kops 程序拉取数据 )
      docker:
        logDriver: ""
        registryMirrors:
            - https://registry.docker-cn.com
    
  3. 创建集群:

    kops update cluster ${NAME} --yes -v 10

  4. 删除集群

    kops delete cluster ${NAME} --yes -v 10

警告

需要注意 安全组策略 和 dns公网解析