如何使用 Kops 創建 Kubernetes 集群

在本文中,我們將使用 kops 在 Amazon Web Services 上安裝生產級 Kubernetes 集群。 對於本指南,我們假設您有 AWS 賬戶。 此外,您還需要安裝 kubectl,如果您閱讀了我們之前的任何 Kubernetes 文章,您可能已經安裝了它。 如果沒有,我們將在此處提供安裝步驟以及其他依賴項,例如 awscli。

安裝 kubectl、kops 和 awscli 二進製文件

讓我們通過獲取 kubectl 來開始遊戲

curl -Lo kubectl https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl && chmod +x kubectl 

sudo mv kubectl /usr/local/bin/

接下來我們將得到 kops 二進製文件

wget https://github.com/kubernetes/kops/releases/download/1.7.0/kops-linux-amd64

chmod +x kops-linux-amd64

sudo mv kops-linux-amd64 /usr/local/bin/kops

接下來我們需要使用 pip,python 的包管理器來安裝 awscli。 您顯然需要安裝python。

sudo pip install awscli

配置 awscli

您需要擁有 AWS 賬戶的訪問密鑰才能使用 awscli。 你可以參考如何 創建根 AWS 訪問密鑰 文檔。

完成後,我們可以轉到配置部分

aws configure

然後按如下方式工作

AWS Access Key ID [None]: youraccesskeyID
AWS Secret Access Key [None]: yourSecretAccessKey

Default region name [None]: us-west-2
Default output format [None]:

我們稍後也將需要這些鍵,因此您需要將它們輸出到 env 變量。

export AWS_ACCESS_KEY_ID=youraccesskeyID
export AWS_SECRET_ACCESS_KEY=yourSecretAccessKey

您還可以將這些行添加到 ~/.bashrc 並運行 source ~/.bashrc 命令,以便在重新啟動後保持不變。 但請注意,使用您計算機的每個人都可以獲得這些密鑰。

接下來讓我們創建組和用戶 kops 並為其授予所需的權限,以便 kops 可以順利運行。

aws iam create-group --group-name kops

aws iam attach-group-policy --policy-arn arn:aws:iam::aws:policy/AmazonEC2FullAccess --group-name kops

aws iam attach-group-policy --policy-arn arn:aws:iam::aws:policy/AmazonRoute53FullAccess --group-name kops

aws iam attach-group-policy --policy-arn arn:aws:iam::aws:policy/AmazonS3FullAccess --group-name kops

aws iam attach-group-policy --policy-arn arn:aws:iam::aws:policy/IAMFullAccess --group-name kops

aws iam attach-group-policy --policy-arn arn:aws:iam::aws:policy/AmazonVPCFullAccess --group-name kops

aws iam create-user --user-name kops

aws iam add-user-to-group --user-name kops --group-name kops

最後我們為 kops 用戶創建訪問密鑰

aws iam create-access-key --user-name kops

您可以隨時使用以下命令檢查 IAM 用戶

aws iam list-users

創建集群

對於集群創建,我們需要添加更多環境變量。 NAME 將是集群的名稱,因為我們不會進行 DNS 設置,我們將使用基於 gossip 的 DNS,並且該集群名稱需要以 k8s.local 結尾,在此之前您幾乎可以放置任何東西。

export NAME=cluster.k8s.local

接下來,我們需要為集群創建一個 aws 存儲桶,並創建一個 kops 用於狀態存儲的變量。

aws s3api create-bucket --bucket ${NAME}-state

export KOPS_STATE_STORE=s3://cluster.k8s.local-state

接下來我們將實際創建集群。 我們將使用 t2.micro 實例,因為它們符合免費套餐條件,如果您註冊了免費套餐(像我一樣),您可以免費通過。 否則,AWS 將花費您一些錢。

kops create cluster 
 --name=${NAME} 
 --zones=us-west-2a 
 --master-size="t2.micro" 
 --node-size="t2.micro" 
 --node-count="3" 
 --ssh-public-key="~/.ssh/id_rsa.pub"

在此之後,您將獲得新集群的配置文件。

您可以使用此命令對其進行編輯。 它將使用您的默認編輯器,您可以通過更改 $EDITOR 變量來更改該編輯器。

kops edit cluster ${NAME}

查看 yaml 文件後,您可以使用以下命令提交創建集群:

kops update cluster ${NAME} --yes

在此之後,您需要等待一些時間

以下命令可以顯示集群何時準備就緒。

kops validate cluster

在初始化節點之前,您可能需要這樣做幾次。 這是我的集群準備就緒時的樣子。

部署一些應用程序

對於初學者,我們可以安裝儀表板。

kubectl create -f https://git.io/kube-dashboard

我們可以通過以下命令使用儀表板:

kubectl proxy

接下來我們將安裝好的舊襪子店微服務演示。

kubectl apply -n sock-shop -f "https://github.com/microservices-demo/microservices-demo/blob/master/deploy/kubernetes/complete-demo.yaml?raw=true"

kubectl -n sock-shop get svc front-end

你會得到類似的東西

NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
 front-end 100.66.88.111 <nodes> 80:30001/TCP 35m

在這種情況下,我們尋找的是端口 30001。 如果主服務器,我們需要將此端口與 IP 匹配。 需要在 AWS 安全組中允許入站流量到此端口。

接下來,當我們從 ip 和 port 形成 url 時,我們應該得到襪子店站點。

使用完集群後,您可以使用以下命令預覽其刪除:

kops delete cluster --name ${NAME}

實際上用這個刪除它:

kops delete cluster --name ${NAME} --yes

我還不打算刪除它,因為我們將在下一篇文章中在這個集群上使用 kube-prompt。 至此,我們在使用 Kops 成功創建生產級 kubernetes 集群後結束本文。 Kops 代表 Kubernetes Operations,只要您在 AWS 上進行部署,它肯定會讓操作變得簡單。 如果你需要谷歌 Cloud 引擎、裸機或私有 OpenStack Cloud,那麼基於 Ansible 的 Kubespray 對你來說是一件好事,我們將在接下來的一些文章中介紹它。

另請閱讀:

  • 免費電子書 Kubernetes Essentials – 初學者教程