准备计算资源

    Kubernetes 网络模型 假设使用扁平网路能让每个容器与节点都可以相互通信。 在这里我们先忽略用于控制容器网络隔离的 Network policies(Network Policies 不在本指南的范围内)。

    本节将会创建一个专用的 (VPC) 网络来搭建我们的 Kubernetes 集群。

    首先创建一个名为 kubernetes-the-hard-way 的 VPC 网络:

    为了给 Kubernetes 集群的每个节点分配私有 IP 地址,需要创建一个含有足够大 IP 地址池的子网。 在 VPC 网络中创建 kubernetes 子网:

    1. gcloud compute networks subnets create kubernetes \
    2. --network kubernetes-the-hard-way \
    3. --range 10.240.0.0/24

    10.240.0.0/24 IP 地址范围, 可以分配 254 个计算节点。

    防火墙规则

    创建一个防火墙规则允许内部网路通过所有协议进行通信:

    1. gcloud compute firewall-rules create kubernetes-the-hard-way-allow-internal \
    2. --allow tcp,udp,icmp \
    3. --network kubernetes-the-hard-way \
    4. --source-ranges 10.240.0.0/24,10.200.0.0/16

    创建一个防火墙规则允许外部 SSH、ICMP 以及 HTTPS 等通信:

    1. gcloud compute firewall-rules create kubernetes-the-hard-way-allow-external \
    2. --allow tcp:22,tcp:6443,icmp \
    3. --network kubernetes-the-hard-way \

    列出在 kubernetes-the-hard-way VPC 网络中的防火墙规则:

    1. gcloud compute firewall-rules list --filter="network:kubernetes-the-hard-way"

    输出为

    分配固定的 IP 地址, 被用来连接外部的负载平衡器至 Kubernetes API Servers:

    1. gcloud compute addresses create kubernetes-the-hard-way \
    2. --region $(gcloud config get-value compute/region)

    验证 kubernetes-the-hard-way 固定 IP 地址已经在默认的 Compute Region 中创建出来:

    1. gcloud compute addresses list --filter="name=('kubernetes-the-hard-way')"
    1. kubernetes-the-hard-way us-west1 XX.XXX.XXX.XX RESERVED

    本节将会创建基于 的计算实例,原因是它对 containerd 容器引擎有很好的支持。每个虚拟机将会分配一个私有 IP 地址用以简化 Kubernetes 的设置。

    Kubernetes 控制节点

    建立三个控制节点用以配置 Kubernetes 控制平面:

    1. for i in 0 1 2; do
    2. gcloud compute instances create controller-${i} \
    3. --async \
    4. --boot-disk-size 200GB \
    5. --can-ip-forward \
    6. --image-family ubuntu-1804-lts \
    7. --image-project ubuntu-os-cloud \
    8. --machine-type n1-standard-1 \
    9. --private-network-ip 10.240.0.1${i} \
    10. --scopes compute-rw,storage-ro,service-management,service-control,logging-write,monitoring \
    11. --subnet kubernetes \
    12. --tags kubernetes-the-hard-way,controller
    13. done

    每台 worker 节点都需要从 Kubernetes 集群 CIDR 范围中分配一个 Pod 子网。 Pod 子网分配将会在之后的容器网路章节做练习。在 worker 节点内部可以通过 pod-cidr 元数据来获得 Pod 子网的分配结果。

    创建三个计算节点用来作为 Kubernetes Worker 节点:

    验证

    列出所有在默认 Compute Zone 的计算节点:

      输出为:

      1. NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS
      2. controller-1 us-west1-c n1-standard-1 10.240.0.11 XX.XXX.X.XX RUNNING
      3. controller-2 us-west1-c n1-standard-1 10.240.0.12 XX.XXX.XXX.XX RUNNING
      4. worker-0 us-west1-c n1-standard-1 10.240.0.20 XXX.XXX.XXX.XX RUNNING
      5. worker-1 us-west1-c n1-standard-1 10.240.0.21 XX.XXX.XX.XXX RUNNING
      6. worker-2 us-west1-c n1-standard-1 10.240.0.22 XXX.XXX.XX.XX RUNNING

      本教程使用 SSH 来配置控制节点和工作节点。当通过 gcloud compute ssh 第一次连接计算实例时,会自动生成 SSH 证书,并。

      验证 controller-0 的 SSH 访问

      1. gcloud compute ssh controller-0

      因为这是第一次访问,此时会生成 SSH 证书。按照提示操作

      1. WARNING: The public SSH key file for gcloud does not exist.
      2. WARNING: The private SSH key file for gcloud does not exist.
      3. WARNING: You do not have an SSH key for gcloud.
      4. WARNING: SSH keygen will be executed to generate a key.
      5. Generating public/private rsa key pair.
      6. Enter passphrase (empty for no passphrase):
      7. Enter same passphrase again:

      此时,SSH 证书回保存在你的项目中:

      SSH 证书更新后,你就可以登录到 controller-0 实例中了:

      1. Welcome to Ubuntu 18.04 LTS (GNU/Linux 4.15.0-1006-gcp x86_64)
      2. ...