MicroK8sにOperator Lifecycle Manager(OLM) をインストールしてみる

今日はMicroK8sにOperatorインストールを試みました。MicroK8sはMicroK8sをMacOSにインストールしてみるでインストール済みですので、よろしければご参照ください。

  • はじめに
  • kubectlのインストール
  • OLMのインストール
    • system:auth-delegatorの作成
    • extension-apiserver-authentication-readerの作成
    • OLMのインストール
  • Operatorのインストール

はじめに


OLMは以下のコマンドでインストールできますが、MicroK8sのコマンドはmicrok8s.kubectlなのでスクリプト実行が失敗します。従って、kubectlコマンドをインストールしてからOLMをインストールします。(スクリプトのkubectlコマンドをmicrok8s.kubectlコマンドに変更するでも構いません。)

ubuntu@microk8s-vm:~$ curl -sL https://github.com/operator-framework/operator-lifecycle-manager/releases/download/0.15.1/install.sh | bash -s 0.15.1

kubectlのインストール


kubectlコマンドをインストールします。

ubuntu@microk8s-vm:~$ curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 41.9M  100 41.9M    0     0  1006k      0  0:00:42  0:00:42 --:--:-- 1016k
ubuntu@microk8s-vm:~$ chmod +x ./kubectl
ubuntu@microk8s-vm:~$ sudo mv ./kubectl /usr/local/bin/kubectl

以下のコマンドでMicroK8sのconfigを確認し、~/.kube/configにコピーします。

ubuntu@microk8s-vm:~$ microk8s.kubectl config view

上記の対応だけだと以下のエラーが発生するので、clusters.cluster.insecure-skip-tls-verify: trueを追加します。

Unable to connect to the server: x509: certificate signed by unknown authority

最終的な~/.kube/configは以下の通りです。

apiVersion: v1
clusters:
- cluster:
    insecure-skip-tls-verify: true
    server: https://127.0.0.1:16443
  name: microk8s-cluster
contexts:
- context:
    cluster: microk8s-cluster
    user: admin
  name: microk8s
current-context: microk8s
kind: Config
preferences: {}
users:
- name: admin
  user:
    password: パスワード(インストール時に割り当てられています。)
    username: admin

OLMのインストール


以下のコマンドでインストールします。

ubuntu@microk8s-vm:~$ curl -sL https://github.com/operator-framework/operator-lifecycle-manager/releases/download/0.15.1/install.sh | bash -s 0.15.1

しかし、CSVのpackageserverのインストールが失敗します。一応Podは作成されるのですが、TerminateとContainerCreatingを永遠に繰り返します。

CSV "packageserver" failed to reach phase succeeded

eventを確認すると、以下のエラーが確認できました。

35m         Warning   APIServiceResourceIssue            clusterserviceversion/packageserver     clusterrole.rbac.authorization.k8s.io "system:auth-delegator" not found
3m30s       Warning   APIServiceResourceIssue            clusterserviceversion/packageserver     role.rbac.authorization.k8s.io "extension-apiserver-authentication-reader" not found

どうやらKubernetesにデフォルトで設定されるroleがMicroK8sでは設定されていないようですので、system:auth-delegatorとextension-apiserver-authentication-readerを作成します。

system:auth-delegatorの作成


以下のyamlを使って、clusterroleであるsystem:auth-delegatorを作成します。

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  annotations:
    rbac.authorization.kubernetes.io/autoupdate: "true"
  labels:
    kubernetes.io/bootstrapping: rbac-defaults
  managedFields:
  - apiVersion: rbac.authorization.k8s.io/v1
    fieldsType: FieldsV1
    fieldsV1:
      f:metadata:
        f:annotations:
          .: {}
          f:rbac.authorization.kubernetes.io/autoupdate: {}
        f:labels:
          .: {}
          f:kubernetes.io/bootstrapping: {}
      f:rules: {}
    manager: kube-apiserver
    operation: Update
  name: system:auth-delegator
rules:
- apiGroups:
  - authentication.k8s.io
  resources:
  - tokenreviews
  verbs:
  - create
- apiGroups:
  - authorization.k8s.io
  resources:
  - subjectaccessreviews
  verbs:
  - create

extension-apiserver-authentication-readerの作成


以下のyamlを使って、system:auth-delegator roleを作成します。

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  annotations:
    openshift.io/reconcile-protect: "false"
  labels:
    kubernetes.io/bootstrapping: rbac-defaults
  name: extension-apiserver-authentication-reader
  namespace: kube-system
rules:
- apiGroups:
  - ""
  attributeRestrictions: null
  resourceNames:
  - extension-apiserver-authentication
  resources:
  - configmaps
  verbs:
  - get

OLMのインストール


以下のコマンドでリトライすると、エラーなくインストールが完了しました。PodがTerminateとCreatingを繰り返すということも無くなりました。

ubuntu@microk8s-vm:~$ curl -sL https://github.com/operator-framework/operator-lifecycle-manager/releases/download/0.15.1/install.sh | bash -s 0.15.1
customresourcedefinition.apiextensions.k8s.io/catalogsources.operators.coreos.com created
customresourcedefinition.apiextensions.k8s.io/clusterserviceversions.operators.coreos.com created
customresourcedefinition.apiextensions.k8s.io/installplans.operators.coreos.com created
customresourcedefinition.apiextensions.k8s.io/operatorgroups.operators.coreos.com created
customresourcedefinition.apiextensions.k8s.io/subscriptions.operators.coreos.com created
namespace/olm created
namespace/operators created
serviceaccount/olm-operator-serviceaccount created
clusterrole.rbac.authorization.k8s.io/system:controller:operator-lifecycle-manager unchanged
clusterrolebinding.rbac.authorization.k8s.io/olm-operator-binding-olm unchanged
deployment.apps/olm-operator created
deployment.apps/catalog-operator created
clusterrole.rbac.authorization.k8s.io/aggregate-olm-edit unchanged
clusterrole.rbac.authorization.k8s.io/aggregate-olm-view unchanged
operatorgroup.operators.coreos.com/global-operators created
operatorgroup.operators.coreos.com/olm-operators created
clusterserviceversion.operators.coreos.com/packageserver created
catalogsource.operators.coreos.com/operatorhubio-catalog created
Waiting for deployment "olm-operator" rollout to finish: 0 of 1 updated replicas are available...
deployment "olm-operator" successfully rolled out
Waiting for deployment "catalog-operator" rollout to finish: 0 of 1 updated replicas are available...
deployment "catalog-operator" successfully rolled out
Package server phase: Installing
Package server phase: Succeeded
deployment "packageserver" successfully rolled out

Operatorのインストール


せっかくOLMをインストールしたので、試しにOperatorHubからGrafana Operatorをインストールしてみます。

ubuntu@microk8s-vm:~$ kubectl create -f https://operatorhub.io/install/grafana-operator.yaml
namespace/my-grafana-operator created
operatorgroup.operators.coreos.com/operatorgroup created
subscription.operators.coreos.com/my-grafana-operator created
ubuntu@microk8s-vm:~$ kubectl get csv -n my-grafana-operator
NAME                      DISPLAY            VERSION   REPLACES   PHASE
grafana-operator.v3.2.0   Grafana Operator   3.2.0                Installing

少し待つと、インストールが完了しました。

ubuntu@microk8s-vm:~$ kubectl get csv -n my-grafana-operator
NAME                      DISPLAY            VERSION   REPLACES   PHASE
grafana-operator.v3.2.0   Grafana Operator   3.2.0                Succeeded

本当はこの後Grafanaリソースを作成しますが、OLMが動いていることが確認できたので、今日はここまでとします。

以上です。