本文描述如何在Oracle Cloud中创建并访问容器服务。为了简单,所有的操作都是针对root compartment。
创建允许容器运行的Policy
这一步是必须的,否则不允许创建容器集群。
官方文档链接
左上角的产品菜单中:Governance and Administration -> Identity -> Policies
点击“Create Policy”之后,按照下图的样式创建Policy。
创建容器集群
左上角的产品菜单中:Solutions and Platform -> Developer Services -> Container Cluster(OKE)
点击“Create Cluster”之后,页面中的元素较多,以下截图只是上半部分。
虽然元素较多,但是在测试阶段可以几乎完全使用默认值。因此直接点“Create”就好。
在容器集群中的Worker Node可以不用ssh登录(我们在后续只需要通过oci和kubectl命令来操作集群就可以),所以页面中的PUBLIC SSH KEY确实是不用输入的,而默认的Private网络类型也无需修改。
创建容器集群需要花数分钟时间,创建成功以后,在集群页面就可以看到新创建的集群的详细信息。在我的测试里,指定了Node Pool里只有2台Node,不是默认的3台,因此在列表中只显示了两台机器。
创建kubeconfig文件
这一步比较繁琐。分为5个小步骤,不过官方文档中的描述很详尽。
第一步:标准的生成访问密钥的过程
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
点击“Add Public Key”,直接将上一步生成的内容粘贴到输入框中,点“Add”。
第三步:安装配置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”可以在容器集群的信息页面中找到。
至此,我们已经可以使用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中的容器集群前续需要的步骤较多,但是整体上而言还是比较顺畅的体验。