How to Create and Access Container Cluster (Container Engine for Kubernetes) in Oracle Cloud

本文描述如何在Oracle Cloud中创建并访问容器服务。为了简单,所有的操作都是针对root compartment。

创建允许容器运行的Policy

这一步是必须的,否则不允许创建容器集群。
官方文档链接

左上角的产品菜单中:Governance and Administration -> Identity -> Policies
点击“Create Policy”之后,按照下图的样式创建Policy。
NewImage

创建容器集群

官方文档链接

左上角的产品菜单中:Solutions and Platform -> Developer Services -> Container Cluster(OKE)
NewImage

点击“Create Cluster”之后,页面中的元素较多,以下截图只是上半部分。
NewImage

虽然元素较多,但是在测试阶段可以几乎完全使用默认值。因此直接点“Create”就好。
在容器集群中的Worker Node可以不用ssh登录(我们在后续只需要通过oci和kubectl命令来操作集群就可以),所以页面中的PUBLIC SSH KEY确实是不用输入的,而默认的Private网络类型也无需修改。

创建容器集群需要花数分钟时间,创建成功以后,在集群页面就可以看到新创建的集群的详细信息。在我的测试里,指定了Node Pool里只有2台Node,不是默认的3台,因此在列表中只显示了两台机器。

NewImage

创建kubeconfig文件

官方文档链接

这一步比较繁琐。分为5个小步骤,不过官方文档中的描述很详尽。
NewImage

第一步:标准的生成访问密钥的过程

mkdir ~/.oci
openssl genrsa -out ~/.oci/oci_api_key.pem 2048
chmod go-rwx ~/.oci/oci_api_key.pem
openssl rsa -pubout -in ~/.oci/oci_api_key.pem -out ~/.oci/oci_api_key_public.pem
cat ~/.oci/oci_api_key_public.pem | pbcopy

第二步:在管理界面右上角的用户logo那里选择User Settings
NewImage

点击“Add Public Key”,直接将上一步生成的内容粘贴到输入框中,点“Add”。
NewImage

第三步:安装配置Oracle Cloud Infrastructure CLI
OCI CLI是一个命令行工具,就像Google Cloud也会提供gcloud命令行工具一样,这个工具用来在命令行里直接操纵Cloud中的各种资源。因为我们要用oci的create-kubeconfig命令来创建kubecongfig文件,所以需要这一步。

bash -c "$(curl -L https://raw.githubusercontent.com/oracle/oci-cli/master/scripts/install/install.sh)"

中间有一些需要输入的地方,也可以接受默认值一路回车。

运行完毕以后,显示successful。

-- Installation successful.
-- Run the CLI with /usr/local/bin/oci --help

安装完毕以后,必须先进行配置,才可以使用。

oci setup config

这一步配置要在Oracle Cloud的后台各个地方找到需要的信息(Tenancy UCID,User UCID,Region name),并且将值填入才可以。这里不一一赘述,在 官方文档中都有相应描述。

Enter a location for your config [/Users/Kamus/.oci/config]:
Enter a user OCID: "your user ocid here"
Enter a tenancy OCID: "your tenancy ocid here"
Enter a region (e.g. ap-mumbai-1, ap-seoul-1, ap-sydney-1, ap-tokyo-1, ca-toronto-1, eu-frankfurt-1, eu-zurich-1, sa-saopaulo-1, uk-london-1, us-ashburn-1, us-gov-ashburn-1, us-gov-chicago-1, us-gov-phoenix-1, us-langley-1, us-luke-1, us-phoenix-1): ap-tokyo-1
Do you want to generate a new RSA key pair? (If you decline you will be asked to supply the path to an existing key.) [Y/n]: n
Enter the location of your private key file: /Users/Kamus/.oci/oci_api_key.pem
Fingerprint: 5d:53:af:a8:d2:6b:4d:2f:20:24:b3:5b:c2:eb:89:86
Config written to /Users/Kamus/.oci/config

在最后一步问是否需要生成新的RSA key pair时选择n,因为我们在上面已经生成过了,这里只需要将本地的私钥地址填入即可。

这一步完毕以后,我们已经可以使用oci操纵Oracle Cloud中的资源了,比如我们列出在上面创建容器集群时自动创建的两个计算资源。

$ oci compute instance list -c “your-compartment-id”|grep "display-name"
      "display-name": "oke-cqwkmbzgbrd-nztqytbgjst-sxqablc2qgq-0",
      "display-name": "oke-cqwkmbzgbrd-nztqytbgjst-sxqablc2qgq-1",

oci命令行工具的完整文档参看这里

第四步:生成kubeconfig
oci工具只是操作Oracle Cloud中的基础资源,想要管理容器,还是要使用kubectl。为了让kubectl可以知道操纵哪里的容器集群,需要生成kubeconfig。

mkdir -p $HOME/.kube
oci ce cluster create-kubeconfig --cluster-id “your-cluster-id” --file /Users/Kamus/.kube/config.oci --region ap-tokyo-1 --token-version 2.0.0 
export KUBECONFIG=$HOME/.kube/config.oci

上述命令中的“your-cluster-id”可以在容器集群的信息页面中找到。
NewImage

至此,我们已经可以使用kubectl管理Oracle Cloud中的容器集群了。比如显示默认运行的所有pods。(当前,前提是已经安装了kubectl,如果还未安装,请参阅Kubernetes的官方安装文档

$ kubectl get pods --all-namespaces
NAMESPACE     NAME                                    READY   STATUS    RESTARTS   AGE
kube-system   kube-dns-7bcbdbdbcb-bdfdx               3/3     Running   0          65m
kube-system   kube-dns-7bcbdbdbcb-w8jm7               3/3     Running   0          60m
kube-system   kube-dns-autoscaler-7c6dd95548-9r9wv    1/1     Running   0          65m
kube-system   kube-flannel-ds-f2s6x                   1/1     Running   1          60m
kube-system   kube-flannel-ds-jzrjp                   1/1     Running   0          61m
kube-system   kube-proxy-btccr                        1/1     Running   0          60m
kube-system   kube-proxy-llh74                        1/1     Running   0          61m
kube-system   kubernetes-dashboard-74f74898c9-q9zpw   1/1     Running   0          65m
kube-system   proxymux-client-10.0.10.2               1/1     Running   0          60m
kube-system   proxymux-client-10.0.10.3               1/1     Running   0          61m
kube-system   tiller-deploy-6f8654fd88-xc229          1/1     Running   0          65m

总结:虽然通过kubectl管理Oracle Cloud中的容器集群前续需要的步骤较多,但是整体上而言还是比较顺畅的体验。

Leave a Reply

Your email address will not be published. Required fields are marked *