Kubernetes クイックスタート・デプロイメント

このセクションでは、非実稼働の Sametime ミーティング・サーバーをホストするために使用する、基本的なパイロット版非実稼働 Kubernetes クラスターを速やかにセットアップする方法について説明します。

始める前に

  • Docker CE をダウンロードします。
  • Ingress Controller を使用して Kubernetes v1.16.0 以降をダウンロードします。システムは DNS で解決可能で、ホスト名を正しく設定されているべきです。
    hostnamectl status 
        hostnamectl set-hostname meetings.company.com
  • スワップを無効にする必要があります。
    sed -i '/swap/ s/^/# /' /etc/fstab
注: Kubernetes クイックスタート (単一ノード) をインストールする場合、環境を開始する前に values.yaml 内の次のエントリーをコメント化します。
# recorderNodeRole: recorder
# videoNodeRole: video
# mainNodeRole: main

このタスクについて

CentOS7 または RHEL 7 ボックスで稼働する Kubernetes 非実稼働の単一ノード・クラスターをセットアップするには、次の手順を実行します。完了したら 、「Kubernetes を使用した Sametime ミーティングのインストール」の手順に従って、非実稼働の Sametime ミーティング・サーバーをインストールします。

  1. Linux システムを準備します。
    • システムが DNS で解決可能か確認します。
      hostnamectl status
    • ホスト名が正しく設定されていることを確認します。
      hostnamectl set-hostname meetings.company.com
    • スワップを無効にします。
      sed -i '/swap/ s/^/# /' /etc/fstab
  2. Docker CE をインストールするには、以下のコマンドを入力します。
    yum install -y yum-utils device-mapper-persistent-data lvm2
    yum-config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
    yum install -y docker-ce
    mkdir /etc/docker
    cat > /etc/docker/daemon.json <<EOF
    {
    "exec-opts": ["native.cgroupdriver=systemd"],
    "log-driver": "json-file",
    "log-opts": {
    "max-size": "100m"
    },
    "storage-driver": "overlay2",
    "storage-opts": [
    "overlay2.override_kernel_check=true"
    ]
    }
    EOF
    mkdir -p /etc/systemd/system/docker.service.d
    systemctl daemon-reload
    systemctl enable docker
    systemctl restart docker
  3. Kubernetes をインストールするには、以下のコマンドを入力します。
    cat <<EOF > /etc/sysctl.d/k8s.conf
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    EOF
    sysctl --system
    cat <<EOF > /etc/yum.repos.d/kubernetes.repo
    [kubernetes]
    name=Kubernetes
    baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
    enabled=1
    gpgcheck=1
    repo_gpgcheck=1
    gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
    EOF
    setenforce 0
    sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
    yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
    systemctl enable --now kubelet
  4. 以下のコマンドを入力して、内部 Kubernetes クラスター・ネットワークを作成し、マスター・ノードの汚染解除を行います。
    注: 以下のコマンドは、ネットワーク 192.168.0.0/16 を作成します。DMZ で既にこのネットワークを使用している場合は、別のネットワークを指定してください。
    export POD_CIDR=192.168.0.0/16
    kubeadm init --pod-network-cidr=$POD_CIDR
    mkdir -p $HOME/.kube
    cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    chown $(id -u):$(id -g) $HOME/.kube/config
    kubectl taint nodes --all node-role.kubernetes.io/master-
  5. Calico 3.9 をインストールするには、以下のコマンドを入力します。
    kubectl apply -f https://docs.projectcalico.org/v3.9/manifests/calico.yaml
    curl -O https://docs.projectcalico.org/v3.9/manifests/calico.yaml
    sed -i -e "s?192.168.0.0/16?$POD_CIDR?g" calico.yaml
    kubectl apply -f calico.yaml
  6. Helm をインストールするには、以下のコマンドを入力します。
    curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash
  7. 次のコマンドを入力して、構成を確認します。
    # kubectl get pods -n kube-system
        The output should look similar to the following: 
        NAME                                       READY   STATUS    RESTARTS   AGE
        calico-kube-controllers-6b9d4c8765-8tlsb   1/1     Running   0          5m55s
        calico-node-4wwff                          1/1     Running   0          5m55s
        coredns-6955765f44-79g6n                   1/1     Running   0          7m5s
        coredns-6955765f44-lns5m                   1/1     Running   0          7m5s
        etcd-xxx.xxx.xxx                           1/1     Running   0          6m52s
        kube-apiserver-xxx.xxx.xxx                 1/1     Running   0          6m52s
        kube-controller-manager-xxx.xxx.xxx        1/1     Running   0          6m52s
        kube-proxy-2mtg5                           1/1     Running   0          7m5s
        kube-scheduler-xxx.xxx.xxx                 1/1     Running   0          6m52s
  8. Ingress を有効にします。Sametime ミーティングではインバウンド Web トラフィックを許可するために必要になります。
    1. まだ実行していない場合は、Flexnet から sametime_meetings.zip をダウンロードして解凍します。
    2. 抽出されたファイルを含むディレクトリーから、以下のコマンドを実行します。
      kubectl apply -f kubernetes/ingress/mandatory.yaml
    3. カスタム証明書を Ingress Controller に適用するには、証明書とプライベート・キーを取得します。次に以下のコマンドを実行して、それらを使用する Ingress を構成します。KEY_FILE にはプライベート・キー・ファイル、CERT_FILE には証明書ファイルを指定します。
      export CERT_NAME=ingress-tls-cert
      export KEY_FILE=privkey.pem
      export CERT_FILE=fullchain.pem
      kubectl -n ingress-nginx create secret tls ${CERT_NAME} --key ${KEY_FILE} --cert ${CERT_FILE}
      kubectl patch deployment nginx-ingress-controller -n ingress-nginx --patch "$(cat kubernetes/ingress/nginx-tls-patch.yaml)"

      適用するには、Ingress Controller を再起動する必要があります。

      kubectl scale deployment nginx-ingress-controller -n ingress-nginx --replicas=0
                        kubectl scale deployment nginx-ingress-controller -n ingress-nginx --replicas=1
  9. EFK (Elasticsearch、Fluentd、Kibina) スタック・グローバル・ロギングを使用可能にするには:
    1. システムでグローバル・ロギングを有効にするには、 sametime_meetings.zip を解凍したディレクトリーから以下のコマンドを実行します。
      kubectl create namespace logging
      kubectl create -f kubernetes/logging/elastic.yaml -n logging
      kubectl create -f kubernetes/logging/kibana.yaml -n logging
      kubectl create configmap fluentd-conf --from-file=kubernetes/logging/kubernetes.conf --namespace=kube-system
      kubectl create -f kubernetes/logging/fluentd-daemonset-elasticsearch-rbac.yaml 
    2. ログにアクセスするには、以下のコマンドを実行します。
      # kubectl get service -n logging
      The output should look similar to the following:
              NAME            TYPE       CLUSTER-IP       EXTERNAL-IP        PORT(S)           AGE
              elasticsearch   NodePort   10.102.149.212   <none>        9200:30531/TCP       17m
              kibana          NodePort   10.106.226.34    <none>        5601:32683/TCP       74s

      上記の例の IP:port 10.106.226.34 は、kibana にアクセスできる場所です。SSH -L 5601:10.106.226.34:32683 を介してそのポートにトンネリングするか、kube-proxy などの Ingress メカニズムを使用してリモート・マシンからアクセスする必要があります。

  10. Prometheus によるモニターを有効にするには:
    1. sametime_meetings.zip を解凍したディレクトリーから以下のコマンドを実行します。
      kubectl create -f kubernetes/monitoring/manifests/setup
      until kubectl get servicemonitors --all-namespaces ; do date; sleep 1; echo ""; done
      kubectl create -f kubernetes/monitoring/manifests/
    2. ダッシュボードにアクセスするには、以下のコマンドを実行します。
      # kubectl get service -n monitoring
      The output should look similar to the following: 
              NAME                    TYPE        CLUSTER-IP     EXTERNAL-IP       PORT(S)                      AGE
              alertmanager-main       ClusterIP   10.102.208.148   <none>         9093/TCP                     3m28s
              alertmanager-operated   ClusterIP   None             <none>         9093/TCP,9094/TCP,9094/UDP   3m28s
              grafana                 ClusterIP   10.99.202.138    <none>         3000/TCP                     3m27s
              kube-state-metrics      ClusterIP   None             <none>         8443/TCP,9443/TCP            3m27s
              node-exporter           ClusterIP   None             <none>         9100/TCP                     3m27s
              prometheus-adapter      ClusterIP   10.96.21.117     <none>         443/TCP                      3m26s
              prometheus-k8s          ClusterIP   10.108.84.189    <none>         9090/TCP                     3m26s
              prometheus-operated     ClusterIP   None             <none>        9090/TCP                     3m26s
              prometheus-operator     ClusterIP   None             <none>        8443/TCP       

      IP:port 10.108.84.189:9090、10.102.208.148:9093、10.99.202.138:3000 はそれぞれ、Prometheus、Alertmanager、Grafana のダッシュボードになります。SSH -L 9090:10.108.84.189:9090 -L 10.102.208.148:9093 -L 3000:10.99.202.138:3000 を介してこれらのポートにトンネリングするか、kube-proxy などの Ingress メカニズムを使用してリモート・マシンからアクセスする必要があります。

次のタスク

Kubernetes を使用した Sametime ミーティングのインストール