Kubernetes
  • 序言
  • 基礎入門
    • Kubernetes 簡介
    • Kubernetes 基本概念
    • Kubernetes 101
    • Kubernetes 201
    • Kubernetes 集群
  • 核心原理
    • 核心原理
    • 架構原理
    • 設計理念
    • 核心組件
      • etcd
      • kube-apiserver
      • kube-scheduler
      • kube-controller-manager
      • kubelet
      • kube-proxy
      • kube-dns
      • Federation
      • kubeadm
      • hyperkube
      • kubectl
    • 資源對象
      • Autoscaling
      • ConfigMap
      • CronJob
      • CustomResourceDefinition
      • DaemonSet
      • Deployment
      • Ingress
      • Job
      • LocalVolume
      • Namespace
      • NetworkPolicy
      • Node
      • PersistentVolume
      • Pod
      • PodPreset
      • ReplicaSet
      • Resource Quota
      • Secret
      • SecurityContext
      • Service
      • ServiceAccount
      • StatefulSet
      • Volume
  • 部署配置
    • 部署指南
    • kubectl 安裝
    • 單機部署
    • 特性開關
    • 最佳配置
    • 版本支持
    • 集群部署
      • kubeadm
      • kops
      • Kubespray
      • Azure
      • Windows
      • LinuxKit
      • kubeasz
    • 附加組件
      • Addon-manager
      • DNS
      • Dashboard
      • 監控
      • 日誌
      • Metrics
      • GPU
      • Cluster Autoscaler
      • ip-masq-agent
    • Kubernetes-The-Hard-Way
      • 準備部署環境
      • 安裝必要工具
      • 創建計算資源
      • 配置創建證書
      • 配置生成配置
      • 配置生成密鑰
      • 部署 Etcd 群集
      • 部署控制節點
      • 部署計算節點
      • 配置 Kubectl
      • 配置網絡路由
      • 部署 DNS 擴展
      • 煙霧測試
      • 刪除集群
  • 插件擴展
    • API 擴展
      • Aggregation
      • CustomResourceDefinition
    • 訪問控制
      • 認證
      • RBAC 授權
      • 准入控制
    • Scheduler 擴展
    • 網絡插件
      • CNI
      • Flannel
      • Calico
      • Weave
      • Cilium
      • OVN
      • Contiv
      • SR-IOV
      • Romana
      • OpenContrail
      • Kuryr
    • 運行時插件 CRI
      • CRI-tools
      • Frakti
    • 存儲插件
      • 容器存儲接口 CSI
      • FlexVolume
      • glusterfs
    • 網絡策略
    • Ingress Controller
      • Ingress + Letsencrypt
      • minikube Ingress
      • Traefik Ingress
      • Keepalived-VIP
    • Cloud Provider 擴展
    • Device 插件
  • 服務治理
    • 服務治理
      • 一般準則
      • 滾動升級
      • Helm
      • Operator
      • Service Mesh
      • Linkerd
      • Linkerd2
    • Istio
      • 安裝
      • 流量管理
      • 安全管理
      • 策略管理
      • 度量管理
      • 排錯
      • 社區
    • Devops
      • Draft
      • Jenkins X
      • Spinnaker
      • Kompose
      • Skaffold
      • Argo
      • Flux GitOps
  • 實踐案例
    • 實踐概覽
    • 資源控制
    • 集群高可用
    • 應用高可用
    • 調試
    • 端口映射
    • 端口轉發
    • 用戶管理
    • GPU
    • HugePage
    • 安全
    • 審計
    • 備份恢復
    • 證書輪換
    • 大規模集群
    • 大數據與機器學習
      • Spark
      • Tensorflow
    • Serverless
  • 排錯指南
    • 排錯概覽
    • 集群排錯
    • Pod 排錯
    • 網絡排錯
    • PV 排錯
      • AzureDisk
      • AzureFile
    • Windows 排錯
    • 雲平臺排錯
      • Azure
    • 排錯工具
  • 社區貢獻
    • 開發指南
    • 單元測試和集成測試
    • 社區貢獻
  • 附錄
    • 生態圈
    • 學習資源
    • 國內鏡像
    • 如何貢獻
    • 參考文檔
Powered by GitBook
On this page
  • 網絡
  • 虛擬私有網絡(VPC)
  • 防火牆規則
  • Kubernetes 公網 IP 地址
  • 計算實例
  • Kubernetes 控制節點
  • Kubernetes 工作節點
  • 驗證
  • 配置 SSH
  1. 部署配置
  2. Kubernetes-The-Hard-Way

創建計算資源

Previous安裝必要工具Next配置創建證書

Last updated 1 year ago

Kubernetes 需要一些機器去搭建管理 Kubernetes 的控制平臺, 也需要一些工作節點(work node)來運行容器。在這個實驗中你將會創建一些虛擬機,並利用 GCE 來運行安全且高可用的 Kubernetes 集群。

請確定默認 Compute Zone 和 Region 已按照 的設定步驟完成。

網絡

Kubernetes 假設使用扁平網路能讓每個容器與節點都可以相互通信。 在這裏我們先忽略用於控制容器網絡隔離的 Network policies(Network Policies 不在本指南的範圍內)。

虛擬私有網絡(VPC)

本節將會創建一個專用的 (VPC) 網絡來搭建我們的 Kubernetes 集群。

首先創建一個名爲 kubernetes-the-hard-way 的 VPC 網絡:

gcloud compute networks create kubernetes-the-hard-way --subnet-mode custom

爲了給 Kubernetes 集群的每個節點分配私有 IP 地址,需要創建一個含有足夠大 IP 地址池的子網。 在 kubernetes-the-hard-way VPC 網絡中創建 kubernetes 子網:

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

10.240.0.0/24 IP 地址範圍, 可以分配 254 個計算節點。

防火牆規則

創建一個防火牆規則允許內部網路通過所有協議進行通信:

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

創建一個防火牆規則允許外部 SSH、ICMP 以及 HTTPS 等通信:

gcloud compute firewall-rules create kubernetes-the-hard-way-allow-external \
  --allow tcp:22,tcp:6443,icmp \
  --network kubernetes-the-hard-way \
  --source-ranges 0.0.0.0/0

列出在 kubernetes-the-hard-way VPC 網絡中的防火牆規則:

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

輸出爲

NAME                                    NETWORK                  DIRECTION  PRIORITY  ALLOW                 DENY  DISABLED
kubernetes-the-hard-way-allow-external  kubernetes-the-hard-way  INGRESS    1000      tcp:22,tcp:6443,icmp        False
kubernetes-the-hard-way-allow-internal  kubernetes-the-hard-way  INGRESS    1000      tcp,udp,icmp                Fals

Kubernetes 公網 IP 地址

分配固定的 IP 地址, 被用來連接外部的負載平衡器至 Kubernetes API Servers:

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

驗證 kubernetes-the-hard-way 固定 IP 地址已經在默認的 Compute Region 中創建出來:

gcloud compute addresses list --filter="name=('kubernetes-the-hard-way')"

輸出爲

NAME                     ADDRESS/RANGE   TYPE      PURPOSE  NETWORK  REGION    SUBNET  STATUS
kubernetes-the-hard-way  XX.XXX.XXX.XXX  EXTERNAL                    us-west1          RESERVED

計算實例

Kubernetes 控制節點

建立三個控制節點用以配置 Kubernetes 控制平面:

for i in 0 1 2; do
  gcloud compute instances create controller-${i} \
    --async \
    --boot-disk-size 200GB \
    --can-ip-forward \
    --image-family ubuntu-2004-lts \
    --image-project ubuntu-os-cloud \
    --machine-type e2-standard-2 \
    --private-network-ip 10.240.0.1${i} \
    --scopes compute-rw,storage-ro,service-management,service-control,logging-write,monitoring \
    --subnet kubernetes \
    --tags kubernetes-the-hard-way,controller
done

Kubernetes 工作節點

每臺 worker 節點都需要從 Kubernetes 集群 CIDR 範圍中分配一個 Pod 子網。 Pod 子網分配將會在之後的容器網路章節做練習。在 worker 節點內部可以通過 pod-cidr 元數據來獲得 Pod 子網的分配結果。

Kubernetes 集群 CIDR 的範圍可以通過 Controller Manager 的 --cluster-cidr 參數來設定。在本次教學中我們會設置爲 10.200.0.0/16,它支持 254 個子網。

創建三個計算節點用來作爲 Kubernetes Worker 節點:

for i in 0 1 2; do
  gcloud compute instances create worker-${i} \
    --async \
    --boot-disk-size 200GB \
    --can-ip-forward \
    --image-family ubuntu-2004-lts \
    --image-project ubuntu-os-cloud \
    --machine-type e2-standard-2 \
    --metadata pod-cidr=10.200.${i}.0/24 \
    --private-network-ip 10.240.0.2${i} \
    --scopes compute-rw,storage-ro,service-management,service-control,logging-write,monitoring \
    --subnet kubernetes \
    --tags kubernetes-the-hard-way,worker
done

驗證

列出所有在默認 Compute Zone 的計算節點:

gcloud compute instances list --filter="tags.items=kubernetes-the-hard-way"

輸出爲:

NAME          ZONE        MACHINE_TYPE   PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP    STATUS
controller-0  us-west1-c  e2-standard-2               10.240.0.10  XX.XX.XX.XXX   RUNNING
controller-1  us-west1-c  e2-standard-2               10.240.0.11  XX.XXX.XXX.XX  RUNNING
controller-2  us-west1-c  e2-standard-2               10.240.0.12  XX.XXX.XX.XXX  RUNNING
worker-0      us-west1-c  e2-standard-2               10.240.0.20  XX.XX.XXX.XXX  RUNNING
worker-1      us-west1-c  e2-standard-2               10.240.0.21  XX.XX.XX.XXX   RUNNING
worker-2      us-west1-c  e2-standard-2               10.240.0.22  XX.XXX.XX.XX   RUNNING

配置 SSH

驗證 controller-0 的 SSH 訪問

gcloud compute ssh controller-0

因爲這是第一次訪問,此時會生成 SSH 證書。按照提示操作

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

此時,SSH 證書回保存在你的項目中:

Your identification has been saved in /home/$USER/.ssh/google_compute_engine.
Your public key has been saved in /home/$USER/.ssh/google_compute_engine.pub.
The key fingerprint is:
SHA256:nz1i8jHmgQuGt+WscqP5SeIaSy5wyIJeL71MuV+QruE $USER@$HOSTNAME
The key's randomart image is:
+---[RSA 2048]----+
|                 |
|                 |
|                 |
|        .        |
|o.     oS        |
|=... .o .o o     |
|+.+ =+=.+.X o    |
|.+ ==O*B.B = .   |
| .+.=EB++ o      |
+----[SHA256]-----+
Updating project ssh metadata...-Updated [https://www.googleapis.com/compute/v1/projects/$PROJECT_ID].
Updating project ssh metadata...done.
Waiting for SSH key to propagate.

SSH 證書更新後,你就可以登錄到 controller-0 實例中了:

Welcome to Ubuntu 20.04 LTS (GNU/Linux 5.4.0-1019-gcp x86_64)

...

Last login: Sun May 13 14:34:27 2018 from XX.XXX.XXX.XX

執行 exit 命令退出 controller-0 實例

$USER@controller-0:~$ exit

logout
Connection to XX.XX.XX.XXX closed

被用來暴露 Kubernetes API Servers 給遠端客戶端。

本節將會創建基於 的計算實例,原因是它對 容器引擎有很好的支持。每個虛擬機將會分配一個私有 IP 地址用以簡化 Kubernetes 的設置。

本教程使用 SSH 來配置控制節點和工作節點。當通過 gcloud compute ssh 第一次連接計算實例時,會自動生成 SSH 證書,並。

下一步:

外部負載均衡器
Ubuntu Server 20.04
containerd
保存在項目或者實例的元數據中
配置 CA 和創建 TLS 證書
Compute Zone
網絡模型
Virtual Private Cloud
事前準備