将 Redis 集群部署到 IBM 云上的 OpenShift 平台会得到以下结果

由于 OpenShift 3.11 可以在 IBM Cloud 的东京区域中使用,因此我立即尝试了一下,并得出了以下结果。这是使用与“在 Kubernetes 上的多区域搭建 Redis 集群时需要考虑的因素”相同的清单,在 IBM Cloud 上重新搭建的 OpenShift。

在这里,我们将IBM Cloud的OpenShift称为“IKS-OS”,并将IBM为传统的CNCF代码新增功能的Kubernetes称为“IKS-K8s”以进行区分。

K8s_and_OS.png

按照浏览器界面的指引,启动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可以在同一个列表中确认。它们的工作节点和网络基础设施是相同的,因此也具有相同的工作节点标签等。

IKS-Cluster-List.png

下载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等等。

bannerAds