将 Redis 集群部署到 IBM 云上的 OpenShift 平台会得到以下结果
由于 OpenShift 3.11 可以在 IBM Cloud 的东京区域中使用,因此我立即尝试了一下,并得出了以下结果。这是使用与“在 Kubernetes 上的多区域搭建 Redis 集群时需要考虑的因素”相同的清单,在 IBM Cloud 上重新搭建的 OpenShift。
在这里,我们将IBM Cloud的OpenShift称为“IKS-OS”,并将IBM为传统的CNCF代码新增功能的Kubernetes称为“IKS-K8s”以进行区分。

按照浏览器界面的指引,启动OpenShift集群。
从 https://cloud.ibm.com/的左上方汉堡菜单中选择Kubernetes,并创建一个集群。根据入口不同,屏幕显示可能会稍有不同,但最终,IKS-K8s和IKS-OS集群都将在同一个IKS集群列表中管理。
使用以下的IKS-OS集群创建参数,将在东京区域的三个区域中启动各一个工作节点。需要注意的是,工作节点是可选择的最小(最便宜)的节点。
-
- プランの選択: 標準
-
- クラスターのタイプおよびバージョン: OpenShift, バージョン3.11
-
- 環境の選択: クラシック・インフラストラクチャー
-
- クラスター名: oc2
-
- リソース・グループ: default
-
- リージョン: Asia Pacific
-
- 可用性: 複数ゾーン
-
- メトロ: Tokyo
-
- ワーカーゾーン: TOK02,TOK04,TOK05
-
- マスター・サービス・エンドポイント: パブリック・エンドポイントのみ
-
- フレーバー: 4 vCPUs 16GB RAM (一番安いタイプ)
- ワーカーノード: 1
确认输入后,点击“创建群集”开始调配。
下一个是处于配置中的屏幕,是OpenShift集群部署进行中的界面。IKS-K8s和IKS-OS可以在同一个列表中确认。它们的工作节点和网络基础设施是相同的,因此也具有相同的工作节点标签等。

下载OpenShift命令行工具并将可执行文件放置在/usr/local/bin等位置。
从显示了前述 IKS 集群列表的页面中,点击 OpenShift 集群的名称以显示“概要页面”。然后切换到“访问”选项卡,将显示下载和安装 OpenShift CLI 等指南。参考这些指南,下载 oc 命令和 kubeclt 命令,以便能够访问 K8s 集群。
确认 OpenShift 版本
使用oc命令显示IKS-OS的版本,可以看到OpennShift为v3.11,而Kubernetes为v1.11。虽然是稍微旧一些的版本,但我认为很快OpenShift4会可用。这已经在Red Hat中宣布过了。
$ ./oc version
oc v3.11.0+0cbc58b
kubernetes v1.11.0+d4cacc0
features: Basic-Auth
Server https://c100-e.jp-tok.containers.cloud.ibm.com:31303
openshift v3.11.129
kubernetes v1.11.0+d4cacc0
尽管 Red Hat 在今年秋季宣布将会在 IBM Cloud 上发布 OpenShift 4.1.3 版本,但似乎提前发布了 3 版本。
使用 OpenShift CLI 登录
从IBM Cloud Kubernetes服务页面右上角的下拉菜单中选择“复制登录命令”,然后将复制的命令粘贴到您的本地终端上。
oc login https://c100-e.jp-tok.containers.cloud.ibm.com:31303 --token=****
通过此方式,可以使用OpenShift自有的oc命令以及包括OpenShift扩展的kubectl命令。
OpenShift 集群节点
在使用oc命令登录后,可以使用从CNCF下载的kubectl命令进行操作。
当然,也可以使用与oc命令一起下载的kubectl命令。
$ kubectl get node
NAME STATUS ROLES AGE VERSION
10.192.57.169 Ready compute,infra 1h v1.11.0+d4cacc0
10.193.10.30 Ready compute,infra 1h v1.11.0+d4cacc0
10.212.5.229 Ready compute,infra 1h v1.11.0+d4cacc0
我使用kubectl命令确认了节点上的标签。结果发现,IKS-OS的标签几乎与IKS-K8s集群的标签相同。
$ kubectl get node 10.192.57.169 --show-labels
NAME STATUS ROLES AGE VERSION LABELS
10.192.57.169 Ready compute,infra 1h v1.11.0+d4cacc0 arch=amd64,beta.kubernetes.io/arch=amd64,beta.kubernetes.io/instance-type=b3c.4x16.encrypted,beta.kubernetes.io/os=linux,failure-domain.beta.kubernetes.io/region=jp-tok,failure-domain.beta.kubernetes.io/zone=tok04,ibm-cloud.kubernetes.io/encrypted-docker-data=true,ibm-cloud.kubernetes.io/iaas-provider=softlayer,ibm-cloud.kubernetes.io/machine-type=b3c.4x16.encrypted,ibm-cloud.kubernetes.io/os=REDHAT_7_64,ibm-cloud.kubernetes.io/sgx-enabled=false,ibm-cloud.kubernetes.io/worker-pool-id=bl41kgpt0avcc1hclqvg-94ad437,ibm-cloud.kubernetes.io/worker-pool-name=default,ibm-cloud.kubernetes.io/worker-version=3.11.129_1518_openshift,kubernetes.io/hostname=10.192.57.169,node-role.kubernetes.io/compute=true,node-role.kubernetes.io/infra=true,privateVLAN=2678050,publicVLAN=2678048
Redis集群的部署
Redis集群的清单可以在https://github.com/takara9/redis-cluster/tree/master/iks-mzr-tok-multi-pod找到。虽然oc命令也可以,但我们将使用kubectl命令按顺序应用清单文件。
# コンフィグマップとサービスをデプロイ
$ kubectl apply -f redis-configmap.yml
configmap/redis-cluster created
$ kubectl apply -f redis-service.yml
service/redis-cluster created
# Redisクラスタの 2つのゾーンにデプロイする
$ kubectl apply -f redis-cluster-mzr-1m.yml # ゾーン tok05
statefulset.apps/redis-cluster-1 created
$ kubectl apply -f redis-cluster-mzr-2m.yml # ゾーン tok04
statefulset.apps/redis-cluster-2 created
接下来是部署的有状态集控制器以及生成的Pod列表。
$ kubectl get sts
NAME DESIRED CURRENT AGE
redis-cluster-1 3 3 8m
redis-cluster-2 3 3 8m
$ kubectl get po -o wide
NAME READY STATUS RESTARTS AGE IP NODE
docker-registry-687f78dcbc-j9bg2 1/1 Running 0 34m 172.30.12.82 10.212.5.229
docker-registry-687f78dcbc-rc5rq 1/1 Running 0 34m 172.30.12.83 10.212.5.229
redis-cluster-1-0 1/1 Running 0 8m 172.30.25.76 10.193.10.30
redis-cluster-1-1 1/1 Running 0 5m 172.30.25.77 10.193.10.30
redis-cluster-1-2 1/1 Running 0 3m 172.30.25.78 10.193.10.30
redis-cluster-2-0 1/1 Running 0 8m 172.30.225.140 10.192.57.169
redis-cluster-2-1 1/1 Running 0 5m 172.30.225.141 10.192.57.169
redis-cluster-2-2 1/1 Running 0 3m 172.30.225.142 10.192.57.169
registry-console-68f6b4d97d-ldx28 1/1 Running 0 18m 172.30.25.72 10.193.10.30
router-6c87d74c7-cx8h7 1/1 Running 0 24m 172.30.25.67 10.193.10.30
router-6c87d74c7-wmd48 1/1 Running 0 23m 172.30.225.132 10.192.57.169
确认持久卷请求时,IKS-K8s中挂载了文件存储,而IKS-OS中挂载了块存储。然而,最小大小与持久存储的最小大小相同,为20GB,即使在清单中设置比最小大小更小的值,也会被舍入为最小大小。
$ kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
data-redis-cluster-1-0 Bound pvc-5efec0e9-b77d-11e9-9e19-be7a4f7a6dc0 20Gi RWO ibmc-block-bronze 9m
data-redis-cluster-1-1 Bound pvc-d10c1e03-b77d-11e9-9e19-be7a4f7a6dc0 20Gi RWO ibmc-block-bronze 5m
data-redis-cluster-1-2 Bound pvc-2a08d554-b77e-11e9-9e19-be7a4f7a6dc0 20Gi RWO ibmc-block-bronze 3m
data-redis-cluster-2-0 Bound pvc-61ed461c-b77d-11e9-9e19-be7a4f7a6dc0 20Gi RWO ibmc-block-bronze 8m
data-redis-cluster-2-1 Bound pvc-d31ce74f-b77d-11e9-9e19-be7a4f7a6dc0 20Gi RWO ibmc-block-bronze 5m
data-redis-cluster-2-2 Bound pvc-2d2a63fc-b77e-11e9-9e19-be7a4f7a6dc0 20Gi RWO ibmc-block-bronze 3m
registry-backing Bound pvc-d3f12c0b-b779-11e9-8384-926f70939424 20Gi RWX ibmc-file-bronze 34m
当列举存储类型时,我们了解到在IKS-OS中,已经预先创建了块存储的存储类型。
$ kubectl get sc
NAME PROVISIONER AGE
default ibm.io/ibmc-file 42m
ibmc-block-bronze (default) ibm.io/ibmc-block 42m
ibmc-block-custom ibm.io/ibmc-block 42m
ibmc-block-gold ibm.io/ibmc-block 42m
ibmc-block-retain-bronze ibm.io/ibmc-block 42m
ibmc-block-retain-custom ibm.io/ibmc-block 42m
ibmc-block-retain-gold ibm.io/ibmc-block 42m
ibmc-block-retain-silver ibm.io/ibmc-block 42m
ibmc-block-silver ibm.io/ibmc-block 42m
ibmc-file-bronze ibm.io/ibmc-file 42m
ibmc-file-custom ibm.io/ibmc-file 42m
ibmc-file-gold ibm.io/ibmc-file 42m
ibmc-file-retain-bronze ibm.io/ibmc-file 42m
ibmc-file-retain-custom ibm.io/ibmc-file 42m
ibmc-file-retain-gold ibm.io/ibmc-file 42m
ibmc-file-retain-silver ibm.io/ibmc-file 42m
ibmc-file-silver ibm.io/ibmc-file 42m
安装Redis集群
在一个Redis的Pod中执行命令,以配置一个Replica数为1的Redis集群。
$ kubectl exec -it redis-cluster-1-0 -- redis-cli --cluster create --cluster-replicas 1 $(kubectl get pods -l 'app=redis-cluster' -o jsonpath='{range.items[*]}{.status.podIP}:6379 ')
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 172.30.225.141:6379 to 172.30.25.76:6379
Adding replica 172.30.225.142:6379 to 172.30.25.77:6379
Adding replica 172.30.225.140:6379 to 172.30.25.78:6379
<中略>
>>> Check slots coverage...
[OK] All 16384 slots covered.
通过这种方式,Redis集群的节点被配置为Redis主节点和从节点。
$ kubectl exec redis-cluster-1-0 -- redis-cli -c cluster nodes
80793e3e94ae6c6104c0640d6d18e6f4651a9ba2 172.30.225.141:6379@16379 slave af19887c54c6fb939f8933ee52dcdd57b291b445 0 1565009196000 5 connected
62bcb121ed1d4985023eaef668794d20f9d13c60 172.30.225.140:6379@16379 slave a1126752c3d832ec244e3823324080f79529f805 0 1565009196000 4 connected
9df2f8604a47edabe5d38e908fadcb600021442a 172.30.225.142:6379@16379 slave 34bbfdcd3b15e3c008d161be59c968f4825b0bc6 0 1565009197628 6 connected
a1126752c3d832ec244e3823324080f79529f805 172.30.25.78:6379@16379 master - 0 1565009197000 3 connected 10923-16383
34bbfdcd3b15e3c008d161be59c968f4825b0bc6 172.30.25.77:6379@16379 master - 0 1565009198629 2 connected 5461-10922
af19887c54c6fb939f8933ee52dcdd57b291b445 172.30.25.76:6379@16379 myself,master - 0 1565009198000 1 connected 0-5460
在第三个区域部署一个有状态集。
$ kubectl apply -f redis-cluster-mzr-3m.yml
statefulset.apps/redis-cluster-3 created
以下列表中的NODE列是K8s节点的名称,IKS-K8s和IKS-OS都分配了相同的私有IP地址。
可以看出,在OpenShift上,已经启动了Docker仓库和其控制台,以及路由器的Pod。
$ kubectl get po -o wide
NAME READY STATUS RESTARTS AGE IP NODE
docker-registry-687f78dcbc-j9bg2 1/1 Running 0 46m 172.30.12.82 10.212.5.229
docker-registry-687f78dcbc-rc5rq 1/1 Running 0 46m 172.30.12.83 10.212.5.229
redis-cluster-1-0 1/1 Running 0 21m 172.30.25.76 10.193.10.30
redis-cluster-1-1 1/1 Running 0 18m 172.30.25.77 10.193.10.30
redis-cluster-1-2 1/1 Running 0 15m 172.30.25.78 10.193.10.30
redis-cluster-2-0 1/1 Running 0 21m 172.30.225.140 10.192.57.169
redis-cluster-2-1 1/1 Running 0 18m 172.30.225.141 10.192.57.169
redis-cluster-2-2 1/1 Running 0 15m 172.30.225.142 10.192.57.169
redis-cluster-3-0 1/1 Running 0 8m 172.30.12.87 10.212.5.229
redis-cluster-3-1 1/1 Running 0 4m 172.30.12.88 10.212.5.229
redis-cluster-3-2 0/1 Running 0 2m 172.30.12.89 10.212.5.229
registry-console-68f6b4d97d-ldx28 1/1 Running 0 31m 172.30.25.72 10.193.10.30
router-6c87d74c7-cx8h7 1/1 Running 0 36m 172.30.25.67 10.193.10.30
router-6c87d74c7-wmd48 1/1 Running 0 35m 172.30.225.132 10.192.57.169
在第三个区域的Pod上设置Redis从节点。
$ kubectl exec redis-cluster-1-0 -- redis-cli --cluster add-node --cluster-slave --cluster-master-id af19887c54c6fb939f8933ee52dcdd57b291b445 $(kubectl get pod redis-cluster-3-0 -o jsonpath='{.status.podIP}'):6379 $(kubectl get pod redis-cluster-1-0 -o jsonpath='{.status.podIP}'):6379
>>> Adding node 172.30.12.87:6379 to cluster 172.30.25.76:6379
>>> Performing Cluster Check (using node 172.30.25.76:6379)
>>> Configure node as replica of 172.30.25.76:6379.
<中略>
[OK] New node added correctly.
$ kubectl exec redis-cluster-1-0 -- redis-cli --cluster add-node --cluster-slave --cluster-master-id 34bbfdcd3b15e3c008d161be59c968f4825b0bc6 $(kubectl get pod redis-cluster-3-1 -o jsonpath='{.status.podIP}'):6379 $(kubectl get pod redis-cluster-1-0 -o jsonpath='{.status.podIP}'):6379
>>> Adding node 172.30.12.88:6379 to cluster 172.30.25.76:6379
>>> Performing Cluster Check (using node 172.30.25.76:6379)
<中略>
[OK] New node added correctly.
$ kubectl exec redis-cluster-1-0 -- redis-cli --cluster add-node --cluster-slave --cluster-master-id a1126752c3d832ec244e3823324080f79529f805 $(kubectl get pod redis-cluster-3-2 -o jsonpath='{.status.podIP}'):6379 $(kubectl get pod redis-cluster-1-0 -o jsonpath='{.status.podIP}'):6379
>>> Adding node 172.30.12.89:6379 to cluster 172.30.25.76:6379
>>> Performing Cluster Check (using node 172.30.25.76:6379)
<中略>
[OK] New node added correctly.
确认添加了从节点并且正在正常工作。目前,Redis主节点主要集中在第一个区域。
$ kubectl exec redis-cluster-1-0 -- redis-cli -c cluster nodes
750622a1530ba5863bbd741a76be315056aaf4f5 172.30.12.87:6379@16379 slave af19887c54c6fb939f8933ee52dcdd57b291b445 0 1565010049287 1 connected
80793e3e94ae6c6104c0640d6d18e6f4651a9ba2 172.30.225.141:6379@16379 slave af19887c54c6fb939f8933ee52dcdd57b291b445 0 1565010046778 5 connected
62bcb121ed1d4985023eaef668794d20f9d13c60 172.30.225.140:6379@16379 slave a1126752c3d832ec244e3823324080f79529f805 0 1565010044000 4 connected
9df2f8604a47edabe5d38e908fadcb600021442a 172.30.225.142:6379@16379 slave 34bbfdcd3b15e3c008d161be59c968f4825b0bc6 0 1565010047000 6 connected
13c6f1ba8b6704ecf2757ce0b356c3a3cb1d835d 172.30.12.88:6379@16379 slave 34bbfdcd3b15e3c008d161be59c968f4825b0bc6 0 1565010048284 2 connected
4adaf2831b39f6cea0aaee0af1d3a8aa0b8e397f 172.30.12.89:6379@16379 slave a1126752c3d832ec244e3823324080f79529f805 0 1565010045000 3 connected
a1126752c3d832ec244e3823324080f79529f805 172.30.25.78:6379@16379 master - 0 1565010047278 3 connected 10923-16383
34bbfdcd3b15e3c008d161be59c968f4825b0bc6 172.30.25.77:6379@16379 master - 0 1565010047000 2 connected 5461-10922
af19887c54c6fb939f8933ee52dcdd57b291b445 172.30.25.76:6379@16379 myself,master - 0 1565010046000 1 connected 0-5460
调整 Redis 主节点的位置,将其分散到三个区域中。
$ kubectl exec -it redis-cluster-2-1 -- redis-cli -c cluster failover
OK
$ kubectl exec -it redis-cluster-3-2 -- redis-cli -c cluster failover
OK
确认Redis主节点已分布在三个区域中。可以通过IP地址确定每个Pod,并追踪到对应的区域。根据以下结果可以看出,Redis主节点已成功配置在各自的区域中。
$ kubectl exec -it redis-cluster-1-0 -- redis-cli -c cluster nodes
750622a1530ba5863bbd741a76be315056aaf4f5 172.30.12.87:6379@16379 slave 80793e3e94ae6c6104c0640d6d18e6f4651a9ba2 0 1565010143000 7 connected
80793e3e94ae6c6104c0640d6d18e6f4651a9ba2 172.30.225.141:6379@16379 master - 0 1565010142000 7 connected 0-5460
62bcb121ed1d4985023eaef668794d20f9d13c60 172.30.225.140:6379@16379 slave 4adaf2831b39f6cea0aaee0af1d3a8aa0b8e397f 0 1565010146650 8 connected
9df2f8604a47edabe5d38e908fadcb600021442a 172.30.225.142:6379@16379 slave 34bbfdcd3b15e3c008d161be59c968f4825b0bc6 0 1565010144645 6 connected
13c6f1ba8b6704ecf2757ce0b356c3a3cb1d835d 172.30.12.88:6379@16379 slave 34bbfdcd3b15e3c008d161be59c968f4825b0bc6 0 1565010144000 2 connected
4adaf2831b39f6cea0aaee0af1d3a8aa0b8e397f 172.30.12.89:6379@16379 master - 0 1565010140625 8 connected 10923-16383
a1126752c3d832ec244e3823324080f79529f805 172.30.25.78:6379@16379 slave 4adaf2831b39f6cea0aaee0af1d3a8aa0b8e397f 0 1565010145645 8 connected
34bbfdcd3b15e3c008d161be59c968f4825b0bc6 172.30.25.77:6379@16379 master - 0 1565010145000 2 connected 5461-10922
af19887c54c6fb939f8933ee52dcdd57b291b445 172.30.25.76:6379@16379 myself,slave 80793e3e94ae6c6104c0640d6d18e6f4651a9ba2 0 1565010144000 1 connected
使用redis-cli命令检查Redis集群的运行状态,确认从”cluster_state:ok”可以正常运行。
$ kubectl exec -it redis-cluster-1-0 -- redis-cli -c cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:9
cluster_size:3
<以下省略>
使用OpenShift的oc命令
当然,可以使用oc命令来操作K8s集群。
oc命令可以通过与kubectl相同的操作来使用,并且还添加了使用OpenShift的特有功能的扩展。
$ ./oc get sts
NAME DESIRED CURRENT AGE
redis-cluster-1 3 3 30m
redis-cluster-2 3 3 29m
redis-cluster-3 3 3 16m
$ ./oc get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
docker-registry ClusterIP 172.21.147.71 <none> 5000/TCP 55m
kubernetes ClusterIP 172.21.0.1 <none> 443/TCP,53/UDP,53/TCP 59m
redis-cluster ClusterIP None <none> 6379/TCP,16379/TCP 30m
registry-console ClusterIP 172.21.148.163 <none> 9000/TCP 55m
router LoadBalancer 172.21.149.76 165.***.**.*** 80:32354/TCP,443:30652/TCP 55m
$ ./oc get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
data-redis-cluster-1-0 Bound pvc-5efec0e9-b77d-11e9-9e19-be7a4f7a6dc0 20Gi RWO ibmc-block-bronze 30m
data-redis-cluster-1-1 Bound pvc-d10c1e03-b77d-11e9-9e19-be7a4f7a6dc0 20Gi RWO ibmc-block-bronze 27m
data-redis-cluster-1-2 Bound pvc-2a08d554-b77e-11e9-9e19-be7a4f7a6dc0 20Gi RWO ibmc-block-bronze 24m
data-redis-cluster-2-0 Bound pvc-61ed461c-b77d-11e9-9e19-be7a4f7a6dc0 20Gi RWO ibmc-block-bronze 30m
data-redis-cluster-2-1 Bound pvc-d31ce74f-b77d-11e9-9e19-be7a4f7a6dc0 20Gi RWO ibmc-block-bronze 26m
data-redis-cluster-2-2 Bound pvc-2d2a63fc-b77e-11e9-9e19-be7a4f7a6dc0 20Gi RWO ibmc-block-bronze 24m
data-redis-cluster-3-0 Bound pvc-356e5fd5-b77f-11e9-9e19-be7a4f7a6dc0 20Gi RWO ibmc-block-bronze 17m
data-redis-cluster-3-1 Bound pvc-a7327507-b77f-11e9-9e19-be7a4f7a6dc0 20Gi RWO ibmc-block-bronze 13m
data-redis-cluster-3-2 Bound pvc-067a7880-b780-11e9-9e19-be7a4f7a6dc0 20Gi RWO ibmc-block-bronze 11m
registry-backing Bound pvc-d3f12c0b-b779-11e9-8384-926f70939424 20Gi RWX ibmc-file-bronze 55m
$ ./oc get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pvc-067a7880-b780-11e9-9e19-be7a4f7a6dc0 20Gi RWO Delete Bound default/data-redis-cluster-3-2 10m
pvc-2a08d554-b77e-11e9-9e19-be7a4f7a6dc0 20Gi RWO Delete Bound default/data-redis-cluster-1-2 23m
pvc-2d2a63fc-b77e-11e9-9e19-be7a4f7a6dc0 20Gi RWO Delete Bound default/data-redis-cluster-2-2 23m
pvc-356e5fd5-b77f-11e9-9e19-be7a4f7a6dc0 20Gi RWO Delete Bound default/data-redis-cluster-3-0 16m
pvc-5efec0e9-b77d-11e9-9e19-be7a4f7a6dc0 20Gi RWO Delete Bound default/data-redis-cluster-1-0 29m
pvc-61ed461c-b77d-11e9-9e19-be7a4f7a6dc0 20Gi RWO Delete Bound default/data-redis-cluster-2-0 29m
pvc-a7327507-b77f-11e9-9e19-be7a4f7a6dc0 20Gi RWO Delete Bound default/data-redis-cluster-3-1 13m
pvc-d10c1e03-b77d-11e9-9e19-be7a4f7a6dc0 20Gi RWO Delete Bound default/data-redis-cluster-1-1 26m
pvc-d31ce74f-b77d-11e9-9e19-be7a4f7a6dc0 20Gi RWO Delete Bound default/data-redis-cluster-2-1 26m
pvc-d3f12c0b-b779-11e9-8384-926f70939424 20Gi RWX Delete Bound default/registry-backing ibmc-file-bronze 45m
对Redis集群进行数据写入和读取的测试
Redisクライアントのポッドを起動して、Redisクラスタのサービスを指定して、データの書込みと読出しを実行した。問題なく動作した。
$ kubectl run redis-cli --image redis --restart=Never
pod/redis-cli created
$ kubectl exec -it redis-cli -- bash
root@redis-cli:/data# redis-cli -c -h redis-cluster -p 6379
redis-cluster:6379> set key-a 1001
-> Redirected to slot [6672] located at 172.30.25.77:6379
OK
172.30.25.77:6379> set key-b 2042
OK
172.30.25.77:6379> set key-c 3408
-> Redirected to slot [14930] located at 172.30.12.89:6379
OK
172.30.12.89:6379> get key-a
-> Redirected to slot [6672] located at 172.30.25.77:6379
"1001"
172.30.25.77:6379> get key-b
"2042"
172.30.25.77:6379> get key-c
-> Redirected to slot [14930] located at 172.30.12.89:6379
"3408"
IBM Cloud的ks命令
使用传统的IBM Cloud命令,可以操作IaaS部分。但要登录到IKS-OS集群,必须执行”oc login”命令。
$ ibmclolud ks clusters
OK
名前 ID 状態 ワーカー ロケーション バージョン リソース・グループ名 Provider
iks1 d5361e9e1b0e40e099ecd7fe02a71d64 normal 2 Tokyo 1.12.10_1560* default classic
iks7 bl2p9f7t003ua6f4ku7g normal 3 Tokyo 1.13.8_1529 default classic
jk1 ac86d529194f4f2d857d163e82afa2bf normal 2 Tokyo 1.12.10_1560* default classic
os1 bl3uq30t0dfr6b74a1t0 normal 2 Tokyo 3.11.129_1517_openshift default classic
整理
这次我们完全没有使用OpenShift特有的功能,只是确认它可以作为Kubernetes来使用,但我们知道它可以以相同的方式使用。以下是我们所得出的要点。
-
- 東京リージョンの OpenShift on IBM Cloudで、3ゾーンを使って、高可用性のRedisクラスタを構築することができた。
-
- IKS-K8s のマニフェストを、無修正でそのまま、IKS-OSに適用して、Redisクラスタ を構築できた。
-
- OpenShiftのバージョンは、現在最新の v4 ではなく v3 である。v4のリリースはアナウンスされているので今後に期待する。
-
- OpenShift 独自拡張コマンド oc の他に、CNCFが配布する kubectl コマンドでも操作可能であった。
-
- IKS-OSは、従来のIKS-K8sと同じ実行基盤が利用されており、K8sノードに仮想マシン、ベアメタルマシン、永続ボリュームが利用される。
-
- 永続ボリュームのストレージクラスは、最初からブロックストレージがインストールされており、アクセスモードにRWOを指定すると、ブロックストレージがプロビジョニンングされた。
- IKS-OSはエントリー構成のスペックが高いので応じてコストも高くなる。よって、小規模の場合は、従来のIKS-K8sが良いと思われる。
我想要尝试将ALB和LB结合使用,使用Operator等等。