创建计算资源
Kubernetes 需要一些机器去搭建管理 Kubernetes 的控制平台, 也需要一些工作节点(work node)来运行容器。在这个实验中你将会创建一些虚拟机,并利用 GCE Compute Zone 来运行安全且高可用的 Kubernetes 集群。
请确定默认 Compute Zone 和 Region 已按照 事前准备 的设定步骤完成。

网络

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

虚拟私有网络(VPC)

本节将会创建一个专用的 Virtual Private Cloud (VPC) 网络来搭建我们的 Kubernetes 集群。
首先创建一个名为 kubernetes-the-hard-way 的 VPC 网络:
1
gcloud compute networks create kubernetes-the-hard-way --subnet-mode custom
Copied!
为了给 Kubernetes 集群的每个节点分配私有 IP 地址,需要创建一个含有足够大 IP 地址池的子网。 在 kubernetes-the-hard-way VPC 网络中创建 kubernetes 子网:
1
gcloud compute networks subnets create kubernetes \
2
--network kubernetes-the-hard-way \
3
--range 10.240.0.0/24
Copied!
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
Copied!
创建一个防火墙规则允许外部 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 \
4
--source-ranges 0.0.0.0/0
Copied!
外部负载均衡器 被用来暴露 Kubernetes API Servers 给远端客户端。
列出在 kubernetes-the-hard-way VPC 网络中的防火墙规则:
1
gcloud compute firewall-rules list --filter="network:kubernetes-the-hard-way"
Copied!
输出为
1
NAME NETWORK DIRECTION PRIORITY ALLOW DENY DISABLED
2
kubernetes-the-hard-way-allow-external kubernetes-the-hard-way INGRESS 1000 tcp:22,tcp:6443,icmp False
3
kubernetes-the-hard-way-allow-internal kubernetes-the-hard-way INGRESS 1000 tcp,udp,icmp Fals
Copied!

Kubernetes 公网 IP 地址

分配固定的 IP 地址, 被用来连接外部的负载平衡器至 Kubernetes API Servers:
1
gcloud compute addresses create kubernetes-the-hard-way \
2
--region $(gcloud config get-value compute/region)
Copied!
验证 kubernetes-the-hard-way 固定 IP 地址已经在默认的 Compute Region 中创建出来:
1
gcloud compute addresses list --filter="name=('kubernetes-the-hard-way')"
Copied!
输出为
1
NAME ADDRESS/RANGE TYPE PURPOSE NETWORK REGION SUBNET STATUS
2
kubernetes-the-hard-way XX.XXX.XXX.XXX EXTERNAL us-west1 RESERVED
Copied!

计算实例

本节将会创建基于 Ubuntu Server 20.04 的计算实例,原因是它对 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-2004-lts \
7
--image-project ubuntu-os-cloud \
8
--machine-type e2-standard-2 \
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
Copied!

Kubernetes 工作节点

每台 worker 节点都需要从 Kubernetes 集群 CIDR 范围中分配一个 Pod 子网。 Pod 子网分配将会在之后的容器网路章节做练习。在 worker 节点内部可以通过 pod-cidr 元数据来获得 Pod 子网的分配结果。
Kubernetes 集群 CIDR 的范围可以通过 Controller Manager 的 --cluster-cidr 参数来设定。在本次教学中我们会设置为 10.200.0.0/16,它支持 254 个子网。
创建三个计算节点用来作为 Kubernetes Worker 节点:
1
for i in 0 1 2; do
2
gcloud compute instances create worker-${i} \
3
--async \
4
--boot-disk-size 200GB \
5
--can-ip-forward \
6
--image-family ubuntu-2004-lts \
7
--image-project ubuntu-os-cloud \
8
--machine-type e2-standard-2 \
9
--metadata pod-cidr=10.200.${i}.0/24 \
10
--private-network-ip 10.240.0.2${i} \
11
--scopes compute-rw,storage-ro,service-management,service-control,logging-write,monitoring \
12
--subnet kubernetes \
13
--tags kubernetes-the-hard-way,worker
14
done
Copied!

验证

列出所有在默认 Compute Zone 的计算节点:
1
gcloud compute instances list --filter="tags.items=kubernetes-the-hard-way"
Copied!
输出为:
1
NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS
2
controller-0 us-west1-c e2-standard-2 10.240.0.10 XX.XX.XX.XXX RUNNING
3
controller-1 us-west1-c e2-standard-2 10.240.0.11 XX.XXX.XXX.XX RUNNING
4
controller-2 us-west1-c e2-standard-2 10.240.0.12 XX.XXX.XX.XXX RUNNING
5
worker-0 us-west1-c e2-standard-2 10.240.0.20 XX.XX.XXX.XXX RUNNING
6
worker-1 us-west1-c e2-standard-2 10.240.0.21 XX.XX.XX.XXX RUNNING
7
worker-2 us-west1-c e2-standard-2 10.240.0.22 XX.XXX.XX.XX RUNNING
Copied!

配置 SSH

本教程使用 SSH 来配置控制节点和工作节点。当通过 gcloud compute ssh 第一次连接计算实例时,会自动生成 SSH 证书,并保存在项目或者实例的元数据中
验证 controller-0 的 SSH 访问
1
gcloud compute ssh controller-0
Copied!
因为这是第一次访问,此时会生成 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:
Copied!
此时,SSH 证书回保存在你的项目中:
1
Your identification has been saved in /home/$USER/.ssh/google_compute_engine.
2
Your public key has been saved in /home/$USER/.ssh/google_compute_engine.pub.
3
The key fingerprint is:
4
SHA256:nz1i8jHmgQuGt+WscqP5SeIaSy5wyIJeL71MuV+QruE $USER@$HOSTNAME
5
The key's randomart image is:
6
+---[RSA 2048]----+
7
| |
8
| |
9
| |
10
| . |
11
|o. oS |
12
|=... .o .o o |
13
|+.+ =+=.+.X o |
14
|.+ ==O*B.B = . |
15
| .+.=EB++ o |
16
+----[SHA256]-----+
17
Updating project ssh metadata...-Updated [https://www.googleapis.com/compute/v1/projects/$PROJECT_ID].
18
Updating project ssh metadata...done.
19
Waiting for SSH key to propagate.
Copied!
SSH 证书更新后,你就可以登录到 controller-0 实例中了:
1
Welcome to Ubuntu 20.04 LTS (GNU/Linux 5.4.0-1019-gcp x86_64)
2
3
...
4
5
Last login: Sun May 13 14:34:27 2018 from XX.XXX.XXX.XX
Copied!
执行 exit 命令退出 controller-0 实例
1
$USER@controller-0:~$ exit
2
3
logout
4
Connection to XX.XX.XX.XXX closed
Copied!
最近更新 1yr ago