機械翻訳について

Kubernetesの設定

目次

Kubernetesを設定するためのチート・シート

オペレータを試すためにKubernetes環境を設定する方法については、このページを読み進めてください。 サポートされている環境は、ベア・メタルなどのKubernetesのオンプレミス・インストール、またはOracle Cloud、Microsoft Azure、Google、Amazonなどのクラウド・プロバイダのいずれかです。 クラウド・プロバイダを使用すると、管理コンソールから管理対象Kubernetes環境をプロビジョニングできます。 クラウド上のコンピュート・リソースを使用して、Kubernetesを手動で設定することもできます。 また、開発またはテスト目的に適したKubernetes単一ノード・クラスタを実行する方法もいくつかあります。 次のオプションがあります。

「本番」オプション:

  • クラウド上のベア・コンピュート・リソースに独自のKubernetes環境を設定します。
  • クラウド・プロバイダの管理コンソールを使用して、管理対象Kubernetes環境をプロビジョニングします。
  • Kubernetesを独自のコンピュート・リソース(たとえば、クラウド外部の実際のコンピュータ)にインストールします。

「開発/テスト」オプション:

  • Docker for MacまたはDocker for Windowsをインストールし、その埋込みKubernetesクラスタを有効にします。
  • Minikube、Minishift、kindなどの他の開発/テスト・オプションを推奨またはサポート「しません」

次の各項では、これらのオプションのヒントをいくつか紹介しています。

クラウドのベア・コンピュート・リソースでのKubernetesの設定

「Terraform Oracle Cloud InfrastructureのOKEモジュール・インストーラ」の基本ステップに従います。

前提条件

  1. 「Terraform Oracle Cloud InfrastructureのOKEモジュール・インストーラ」をダウンロードしてインストールします。
  2. Terraformモジュールのディレクトリを作成します:
    $ mkdir terraformmodule
    $ cd terraformmodule
    
  3. クラスタとローカルで対話する場合は、kubectlがインストールされていることを確認します。

クイック・スタート

クイック・スタートでは、「IstioおよびOKEとの複数リージョン・サービス・メッシュ」で提供されているサンプルを使用します。

  1. Terraform Kubernetes Installerプロジェクトのgit cloneを実行します:

    $ git clone https://github.com/oracle-terraform-modules/terraform-oci-oke.git
    
  2. 次のコマンドを実行します:

    $ cd terraform-oci-oke/examples
    $ mkdir okewko
    $ cp -rf istio-mc okewko
    $ cd okewko
    
  3. c1.tfおよびc2.tfを編集して、次を追加します:

    allow_bastion_cluster_access = true
    bastion_is_public = true
    control_plane_is_public = true
    
    $ cp terraform.tfvars.example terraform.tfvars
    
  4. terraform.tfvarsファイルで、すべての値をキーおよびIDへの正しいパスで更新します。

  5. 次のコマンドを実行します。

    $ terraform init
    $ terraform plan
    $ terraform apply --auto-approve
    

    これにより、2つのOKEクラスタが作成されます。

  6. OCIダッシュボードにログインします。

    a. 「開発者サービス」>「OKEクラスタ」に移動します。

    b. 「c1クラスタ」>「アクセス・クラスタ」を選択します。

    c. 次のように、このコマンドをコピーして貼り付けてkubeconfigを作成します:

    $ oci ce cluster create-kubeconfig --cluster-id ocid1.cluster.oc1...... --file $HOME/.kube/config --region us-phoenix-1 --token-version 2.0.0 --kube-endpoint PUBLIC_ENDPOINT
    
    $ export KUBECONFIG= $HOME/.kube/config
    
  7. クラスタにアクセスできることを確認します:

    $ kubectl get nodes
    

独自のコンピュート・リソースにKubernetesをインストール

たとえば、クラウド外のOracle Linuxサーバーの場合。

これらの手順はOracle Linux 7u2+用です。 別のフレーバのLinuxを使用している場合は、それに応じて調整する必要があります。

これらのステップは、特に指定しないかぎり、rootユーザーで実行する必要があります。 コマンドにYOUR_USERIDが表示されている場合は、それを実際のuseridに置き換える必要があります。

  1. DockerおよびKubernetesファイルが格納されるディレクトリを選択します。 Dockerディレクトリは、すべてのイメージおよびコンテナを含む/var/lib/dockerファイル・システムに使用されるため、多くの空き領域(100GBを超える)があるディスクに配置する必要があります。 Kubernetesディレクトリは、/var/lib/kubeletファイル・システムおよび永続ボリューム・ストレージに使用されます。

    $ export docker_dir=/scratch/docker
    
    $ export k8s_dir=/scratch/k8s_dir
    
  2. 必要な環境変数を設定するシェル・スクリプトを作成します。 ログイン時に実行されるように、これをユーザーの.bashrcに追加するだけでよいでしょう。 HTTPプロキシの背後にいる場合は、ここでプロキシ設定を構成する必要もあります:

    #!/bin/bash
    export PATH=$PATH:/sbin:/usr/sbin
    pod_network_cidr="10.244.0.0/16"
    
    k8s_dir=$k8s_dir
    
    ## grab my IP address to pass into  kubeadm init, and to add to no_proxy vars
    # assume ipv4 and eth0
    ip_addr=`ip -f inet addr show eth0  | egrep inet | awk  '{print $2}' | awk -F/ '{print $1}'\`
    
    export HTTPS_PROXY=http://proxy:80
    export https_proxy=http://proxy:80
    export NO_PROXY=localhost,127.0.0.1,.my.domain.com,/var/run/docker.sock,$pod_network_cidr,$ip_addr
    export no_proxy=localhost,127.0.0.1,.my.domain.com,/var/run/docker.sock,$pod_network_cidr,$ip_addr
    export HTTP_PROXY=http://proxy:80
    export http_proxy=http://proxy:80
    
    export KUBECONFIG=$k8s_dir/admin.conf
    

    環境変数を設定する次のスクリプトを実行します:

    $ . ~/.bashrc
    

    コマンドの完了が必要な場合は、次をスクリプトに追加できます:

    [ -f /usr/share/bash-completion/bash_completion ] && . /usr/share/bash-completion/bash_completion
    source <(kubectl completion bash)
    
  3. 必要なディレクトリを作成します:

    $ mkdir -p $docker_dir $k8s_dir/kubelet
    
    $ ln -s $k8s_dir/kubelet /var/lib/kubelet
    
  4. インストールするDockerバージョンで環境変数を設定します:

    $ docker_version="18.09.1.ol"
    
  5. Dockerをインストールし、以前にインストールしたバージョンを削除します:

    ### install docker and curl-devel (for git if needed)
    
    $ yum-config-manager --enable ol7_addons ol7_latest
    
    # we are going to just uninstall any docker-engine that is installed
    
    $ yum -y erase docker-engine docker-engine-selinux
    
    # now install the docker-engine at our specified version
    
    $ yum -y install docker-engine-$docker_version curl-devel
    
  6. Dockerオプションを更新します:

    # edit /etc/sysconfig/docker to add custom OPTIONS
    
    $ cat /etc/sysconfig/docker | sed "s#^OPTIONS=.*#OPTIONS='--selinux-enabled --group=docker -g $docker_dir'#g" > /tmp/docker.out
    
    $ diff /etc/sysconfig/docker /tmp/docker.out
    
    $ mv /tmp/docker.out /etc/sysconfig/docker
    
  7. 必要に応じて、HTTPプロキシ構成を含むDockerネットワークを設定します:

    # generate a custom /setc/sysconfig/docker-network
    
    $ cat <<EOF > /etc/sysconfig/docker-network
    # /etc/sysconfig/docker-network
    DOCKER_NETWORK_OPTIONS="-H tcp://0.0.0.0:4243 -H unix:///var/run/docker.sock"
    HTTP_PROXY="http://proxy:80"
    HTTPS_PROXY="http://proxy:80"
    NO_PROXY="localhost,127.0.0.0/8,.my.domain.com,/var/run/docker.sock"
    EOF
    
  8. dockerグループにユーザーを追加します:

    $ usermod -aG docker YOUR_USERID
    
  9. インストールして構成したDockerサービスを有効にして起動します:

    $ systemctl enable docker && systemctl start docker
    
  10. Kubernetesパッケージをインストールします:

    #!/bin/bash
    # generate the yum repo config
    cat <<EOF > /etc/yum.repos.d/kubernetes.repo
    [kubernetes]
    name=Kubernetes
    baseurl=http://yum.kubernetes.io/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
    # install kube* packages
    v=${1:-1.17.0-0}
    old_ver=`echo $v | egrep "^1.7"`
    yum install -y kubelet-$v kubeadm-$v kubectl-$v kubernetes-cni
    
    # change the cgroup-driver to match what docker is using
    cgroup=`docker info 2>&1 | egrep Cgroup | awk '{print $NF}'`
    [ "$cgroup" == "" ] && echo "cgroup not detected!" && exit 1
    
    cat /etc/systemd/system/kubelet.service.d/10-kubeadm.conf | sed "s#KUBELET_CGROUP_ARGS=--cgroup-driver=.*#KUBELET_CGROUP_ARGS=--cgroup-driver=$cgroup\"#"> /etc/systemd/system/kubelet.service.d/10-kubeadm.conf.out
    diff  /etc/systemd/system/kubelet.service.d/10-kubeadm.conf  /etc/systemd/system/kubelet.service.d/10-kubeadm.conf.out
    mv /etc/systemd/system/kubelet.service.d/10-kubeadm.conf.out  /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
    
    if [ "$old_ver" = "" ] ; then
    
    # run with swap if not in version 1.7* (starting in 1.8, kubelet
    # fails to start with swap enabled)
    #
    cat <<EOF > /etc/systemd/system/kubelet.service.d/90-local-extras.conf
    [Service]
    Environment="KUBELET_EXTRA_ARGS=--fail-swap-on=false"
    EOF
    
    fi
    
  11. Kubernetesサービスを有効にして起動します:

    $ systemctl enable kubelet && systemctl start kubelet
    
  12. CNIにFlannelをインストールして使用します:

    #!/bin/bash
    # run kubeadm init as root
    echo Running kubeadm init --skip-preflight-checks --apiserver-advertise-address=$ip_addr  --pod-network-cidr=$pod_network_cidr
    echo " see /tmp/kubeadm-init.out for output"
    kubeadm init --skip-preflight-checks --apiserver-advertise-address=$ip_addr  --pod-network-cidr=$pod_network_cidr > /tmp/kubeadm-init.out 2>&1
    if [ $? -ne 0 ] ; then
      echo "ERROR: kubeadm init returned non 0"
      chmod a+r  /tmp/kubeadm-init.out
      exit 1
    else
      echo; echo "kubeadm init complete" ; echo
      # tail the log to get the "join" token
      tail -6 /tmp/kubeadm-init.out
    fi
    
    cp /etc/kubernetes/admin.conf  $KUBECONFIG
    chown YOUR_USERID:YOUR_GROUP $KUBECONFIG
    chmod 644 $KUBECONFIG
    

    次のステップは、通常の(root以外の)ユーザーで実行する必要があります。

  13. CNIを構成します:

    $ sudo -u YOUR_USERID kubectl create clusterrolebinding permissive-binding --clusterrole=cluster-admin --user=admin --user=kubelet --group=system:serviceaccounts
    
    $ sudo -u YOUR_USERID kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
    

    このホストのReadykubectl get nodesに表示されるまで待機します:

    #!/bin/bash
    host=`hostname | awk -F. '{print $1}'`
    status="NotReady"
    max=10
    count=1
    while [ ${status:=Error} != "Ready" -a $count -lt $max ] ; do
      sleep 30
      status=`sudo -u YOUR_USERID kubectl get nodes | egrep $host | awk '{print $2}'`
      echo "kubectl status is ${status:=Error}, iteration $count of $max"
      count=`expr $count + 1`
    done
    
    status=`sudo -u YOUR_USERID kubectl get nodes | egrep $host | awk '{print $2}'`
    if [ ${status:=Error} != "Ready" ] ; then
      echo "ERROR: kubectl get nodes reports status=${status:=Error} after configuration, exiting!"
      exit 1
    fi
    
  14. ノードの調整:

    $ sudo -u YOUR_USERID kubectl taint nodes --all node-role.kubernetes.io/master-
    
    $ sudo -u YOUR_USERID kubectl get nodes
    
    $ sudo -u YOUR_USERID kubeadm version
    

    おめでとうございます。 DockerおよびKubernetesがインストールおよび構成されています。

Kubernetesを使用したMac用のDockerのインストール

Docker for Mac 18+は、Macで簡単なテスト環境を設定するための迅速で簡単な方法である「埋込みKubernetes環境」を提供します。 設定するには、次の手順に従います:

  1. "Docker for Mac" https://download.docker.com/mac/edge/Docker.dmgをインストールします。 次に、Dockerアプリケーションを起動します(コマンド・スペース・バーを押し、Dockerと入力して実行します)。 実行後、Dockerアイコンがステータス・バーに表示されます:

    ステータス・バーのDockerアイコン
  2. 「Docker」アイコンをクリックし、ドロップダウン・メニューから「Preferences…」を選択します。 十分なスペアがある場合は、「Advanced」タブに移動して、Dockerにより多少多くのメモリーを割り当てます:

    Dockerメモリー設定
  3. 「Kubernetes」タブに移動し、Kubernetesを有効にするオプションをクリックします:

    Kubernetes設定の有効化

    HTTPプロキシの背後にいる場合は、「プロキシ」タブに移動してプロキシの詳細を入力する必要もあります。

    DockerによってKubernetesコンポーネントがダウンロードされ、起動されます。 完了すると、Kubernetesのステータスが緑色になり、メニューで実行中になります:

    Kubernetes実行中
  4. Mac上のkubectlが正しいクラスタおよびコンテキストを指していることを確認します。

    $ kubectl config get-contexts
    
    CURRENT   NAME                          CLUSTER                      AUTHINFO             NAMESPACE
              docker-for-desktop            docker-for-desktop-cluster   docker-for-desktop
              kubernetes-admin@kubernetes   kubernetes                   kubernetes-admin
    
    $ kubectl config use-context docker-for-desktop
    
    Switched to context "docker-for-desktop".
    
    $ kubectl config get-clusters
    
    NAME
    kubernetes
    docker-for-desktop-cluster
    
    $ kubectl config set-cluster docker-for-desktop-cluster
    
    Cluster "docker-for-desktop-cluster" set.
    
  5. この例に示すように、127.0.0.1/etc/hostsファイル・エントリにdocker-for-desktopを追加する必要があり、このファイルを編集するには管理ユーザーである必要があります:

    ##
    # Host Database
    #
    # localhost is used to configure the loopback interface
    # when the system is booting.  Do not change this entry.
    ##
    127.0.0.1	localhost docker-for-desktop
    255.255.255.255	broadcasthost
    ::1             localhost
    
  6. 次のコマンドを入力して、証明書を無視するようにkubectlに指示する必要がある場合もあります:

    $ kubectl config set-cluster docker-for-desktop --insecure-skip-tls-verify=true
    
  7. 次に、次のコマンドを入力して、DockerでKubernetesと通信していることを確認します:

    $ kubectl cluster-info
    
    Kubernetes master is running at https://docker-for-desktop:6443
    
    To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
    

永続ボリュームに関する重要なノート

Docker for Macには、永続ボリュームのHostPathとして使用できるディレクトリを配置できる場所にいくつかの制限があります。 これを単純にするには、ディレクトリを/Usersの下に配置します。