オペレータを試すためにKubernetes環境を設定する方法については、このページを読み進めてください。 サポートされている環境は、ベア・メタルなどのKubernetesのオンプレミス・インストール、またはOracle Cloud、Microsoft Azure、Google、Amazonなどのクラウド・プロバイダのいずれかです。 クラウド・プロバイダを使用すると、管理コンソールから管理対象Kubernetes環境をプロビジョニングできます。 クラウド上のコンピュート・リソースを使用して、Kubernetesを手動で設定することもできます。 また、開発またはテスト目的に適したKubernetes単一ノード・クラスタを実行する方法もいくつかあります。 次のオプションがあります。
「本番」オプション:
「開発/テスト」オプション:
次の各項では、これらのオプションのヒントをいくつか紹介しています。
「Terraform Oracle Cloud InfrastructureのOKEモジュール・インストーラ」の基本ステップに従います。
$ mkdir terraformmodule
$ cd terraformmodule
クイック・スタートでは、「IstioおよびOKEとの複数リージョン・サービス・メッシュ」で提供されているサンプルを使用します。
Terraform Kubernetes Installerプロジェクトのgit clone
を実行します:
$ git clone https://github.com/oracle-terraform-modules/terraform-oci-oke.git
次のコマンドを実行します:
$ cd terraform-oci-oke/examples
$ mkdir okewko
$ cp -rf istio-mc okewko
$ cd okewko
c1.tf
およびc2.tf
を編集して、次を追加します:
allow_bastion_cluster_access = true
bastion_is_public = true
control_plane_is_public = true
$ cp terraform.tfvars.example terraform.tfvars
terraform.tfvars
ファイルで、すべての値をキーおよびIDへの正しいパスで更新します。
次のコマンドを実行します。
$ terraform init
$ terraform plan
$ terraform apply --auto-approve
これにより、2つのOKEクラスタが作成されます。
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
クラスタにアクセスできることを確認します:
$ kubectl get nodes
たとえば、クラウド外のOracle Linuxサーバーの場合。
これらの手順はOracle Linux 7u2+用です。 別のフレーバのLinuxを使用している場合は、それに応じて調整する必要があります。
これらのステップは、特に指定しないかぎり、root
ユーザーで実行する必要があります。 コマンドにYOUR_USERID
が表示されている場合は、それを実際のuserid
に置き換える必要があります。
DockerおよびKubernetesファイルが格納されるディレクトリを選択します。 Dockerディレクトリは、すべてのイメージおよびコンテナを含む/var/lib/docker
ファイル・システムに使用されるため、多くの空き領域(100GBを超える)があるディスクに配置する必要があります。 Kubernetesディレクトリは、/var/lib/kubelet
ファイル・システムおよび永続ボリューム・ストレージに使用されます。
$ export docker_dir=/scratch/docker
$ export k8s_dir=/scratch/k8s_dir
必要な環境変数を設定するシェル・スクリプトを作成します。 ログイン時に実行されるように、これをユーザーの.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)
必要なディレクトリを作成します:
$ mkdir -p $docker_dir $k8s_dir/kubelet
$ ln -s $k8s_dir/kubelet /var/lib/kubelet
インストールするDockerバージョンで環境変数を設定します:
$ docker_version="18.09.1.ol"
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
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
必要に応じて、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
docker
グループにユーザーを追加します:
$ usermod -aG docker YOUR_USERID
インストールして構成したDockerサービスを有効にして起動します:
$ systemctl enable docker && systemctl start docker
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
Kubernetesサービスを有効にして起動します:
$ systemctl enable kubelet && systemctl start kubelet
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
以外の)ユーザーで実行する必要があります。
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
このホストのReady
がkubectl 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
ノードの調整:
$ 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がインストールおよび構成されています。
Docker for Mac 18+は、Macで簡単なテスト環境を設定するための迅速で簡単な方法である「埋込みKubernetes環境」を提供します。 設定するには、次の手順に従います:
"Docker for Mac" https://download.docker.com/mac/edge/Docker.dmgをインストールします。 次に、Dockerアプリケーションを起動します(コマンド・スペース・バーを押し、Docker
と入力して実行します)。 実行後、Dockerアイコンがステータス・バーに表示されます:
「Docker」アイコンをクリックし、ドロップダウン・メニューから「Preferences…」を選択します。 十分なスペアがある場合は、「Advanced」タブに移動して、Dockerにより多少多くのメモリーを割り当てます:
「Kubernetes」タブに移動し、Kubernetesを有効にするオプションをクリックします:
HTTPプロキシの背後にいる場合は、「プロキシ」タブに移動してプロキシの詳細を入力する必要もあります。
DockerによってKubernetesコンポーネントがダウンロードされ、起動されます。 完了すると、Kubernetesのステータスが緑色になり、メニューで実行中になります:
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.
この例に示すように、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
次のコマンドを入力して、証明書を無視するようにkubectl
に指示する必要がある場合もあります:
$ kubectl config set-cluster docker-for-desktop --insecure-skip-tls-verify=true
次に、次のコマンドを入力して、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
の下に配置します。