これは、Docker Captain Ajeet Raina による一連のゲスト ブログ投稿の最初の投稿で、Docker Enterprise で Kubernetes を実行する方法について説明しています。 ツイッターでアジートをフォローできます @ajeetsraina そして彼のブログを読んでください http://www.collabnix.com.
現在、認定された Kubernetes をクラウドで実行するためのオプションが多数用意されています。 しかし、オンプレミスの運用ワークロードに Kubernetes を採用して運用化しようとしているとします。 では、どうしますか? オンプレミス認定の Kubernetes ディストリビューションには、既存のチームとプロセスを活用できるエンタープライズ コンテナー プラットフォームが必要です。
Docker Kubernetes Service に入る
DockerCon 2019で、Dockerは Docker Kubernetes Service (DKS)を発表しました。 これは、Docker Enterprise 3.0に含まれている認定されたKubernetesディストリビューションであり、この基本的な課題を解決するように設計されています。
このブログ シリーズでは、Docker Enterprise 3.0 での Kubernetes のサポートと機能について説明し、次のトピックを取り上げます。
- ベア・メタル・システムで実行されている Docker Enterprise 3.0 を使用した認定済み Kubernetes クラスターのデプロイ
- iSCSI を使用した Kubernetes ワークロード用の永続ストレージの実装
- Kubernetes のためのクラスター イングレスの実装
- Docker Enterprise 3.0 での Istio Service Mesh のデプロイ
- Docker Enterprise 3.0 を使用した Windows Server 2019 での Kubernetes のサポート
だからDKSについて...
DKSは、開発者のデスクトップから本番サーバーまでKubernetesを統合する唯一の製品であり、「賢明で安全なデフォルト」をすぐに使用できます。 簡単に言えば、DKSはKubernetesを組織全体にとって使いやすく、より安全にします。 企業向けの Kubernetes の導入を簡素化および加速するために DKS が行う 3 つのことを次に示します。
- 開発者とオペレーターのための一貫性のあるシームレスな Kubernetes エクスペリエンス。 バージョン パックを使用すると、Docker Desktop Enterprise で実行されている開発者の Kubernetes 環境は、完全でシームレスな Kubernetes エクスペリエンスを実現するために、本番環境と同期した状態を維持できます。
- 合理化された Kubernetes ライフサイクル管理 (1 日目と 2 日目の運用)。 新しいクラスター管理 CLI プラグインを使用すると、運用チームは、一連のシンプルな CLI コマンドを使用して、認定された Kubernetes 環境を簡単にデプロイ、スケーリング、バックアップ、復元、アップグレードできます。
- 「賢明なデフォルト」によるセキュリティの強化。 チームは、セキュリティ、暗号化、アクセス制御、ライフサイクル管理のためのすぐに使用できる構成を、 Kubernetes のエキスパートになることなく利用できます。
DKS は、マルチコンテナー アプリケーションを作成するための Kubernetes YAML、Helm チャート、および Docker Compose ツールと互換性があります。 また、ハイブリッドおよびマルチクラウドのデプロイ全体で Kubernetes アプリケーションを自動的にインストールおよび構成する方法も提供します。 機能には、セキュリティ、アクセス制御、ライフサイクル管理が含まれます。 さらに、Docker スウォーム モードを使用して Docker コンテナーを調整します。
Kubernetes 1.14+ in Docker Enterprise
Docker Enterprise 3.0 には、次のコンポーネントが付属しています。
- コンテナ1.2.6
- ドッカーエンジン19.03.1
- ランク1.0.0-rc8
- docker-init 0.18.0
- ユニバーサルコントロールプレーン3.2.0
- ドッカートラステッドレジストリ2.7
- Kubernetes 1.14+
- キャリコv3.5.7
このシリーズの最初の投稿では、ベア メタルで Docker Enterprise 3.0 を使用して認定 Kubernetes クラスターをデプロイする方法について説明します (つまり、オンプレミスにデプロイできます)。
前提条件:
- Ubuntu 18.04(マルチノードクラスタをセットアップするために少なくとも2ノード)
- UCP 3.2.0 には最低 4GB の RAM が必要です。
- https://hub.docker.com/my-content に移動します。
- Ubuntu 用の Docker Enterprise Edition の Setup ボタンをクリックします。
- [コピー] というラベルの付いたフィールドから URL をコピー し、この URL を貼り付けてエディションをダウンロードします。
これで、Docker Enterprise と Kubernetes のインストールを開始する準備が整いました。 始めましょう。
ステップ1:aptがHTTPS経由でリポジトリを使用できるようにパッケージをインストールする
$sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ software-properties-common
ステップ 2: $DOCKER_EE_URL 変数を環境に追加する
前提条件でメモした URL に置き換えます。 交換も。 sub-xxx
$curl -fsSL https://storebits.docker.com/ee/m/sub-XXX-44fb-XXX-b6bf-XXXXXX/ubuntu/gpg | sudo apt-key add -
ステップ3:安定したリポジトリを追加する
$sudo add-apt-repository \ "deb [arch=amd64] https://storebits.docker.com/ee/m/sub-XXX-44fb-XXX-b6bf-XXXXXX/ubuntu \ $(lsb_release -cs) \ stable-19.03"
ステップ4:ドッカーエンタープライズをインストールする
$sudo apt-get install docker-ee docker-ee-cli containerd.io
ステップ 5: Docker エンタープライズバージョンの確認
$ sudo docker version Client: Docker Engine - Enterprise Version: 19.03.1 API version: 1.40 Go version: go1.12.5 Git commit: f660560 Built: Thu Jul 25 20:59:23 2019 OS/Arch: linux/amd64 Experimental: false Server: Docker Engine - Enterprise Engine: Version: 19.03.1 API version: 1.40 (minimum version 1.12) Go version: go1.12.5 Git commit: f660560 Built: Thu Jul 25 20:57:45 2019 OS/Arch: linux/amd64 Experimental: false containerd: Version: 1.2.6 GitCommit: 894b81a4b802e4eb2a91d1ce216b8817763c29fb runc: Version: 1.0.0-rc8 GitCommit: 425e105d5a03fabd737a126ad93d62a9eeede87f docker-init: Version: 0.18.0 GitCommit: fec3683 cse@ubuntu1804-1:~$
ステップ 6: Hello World の例をテストする
$ sudo docker run hello-world Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world 1b930d010525: Pull complete Digest: sha256:6540fc08ee6e6b7b63468dc3317e3303aae178cb8a45ed3123180328bcc1d20f Status: Downloaded newer image for hello-world:latest Hello from Docker! This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. (amd64) 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal.
より野心的なことを試すには、次のようにUbuntuコンテナを実行できます。
$ docker run -it ubuntu bash
無料の Docker ID を使用して、イメージの共有、ワークフローの自動化などを行うには、 Docker Hub にサインアップまたはログインします。
その他の例とアイデアについては、 Docker ドキュメントの概要に関するページを参照してください。
ステップ7:ユニバーサルコントロールプレーンv3.2.0をインストールする
$ sudo docker container run --rm -it --name ucp \ > -v /var/run/docker.sock:/var/run/docker.sock \ > docker/ucp:3.2.0 install \ > --host-address 10.94.214.115 \ > --interactive
手順 8: UCP へのアクセス
これで、Dockerユニバーサルコントロールプレーンにアクセスできるはずです https://<node-ip>
[サインイン] をクリックし、ライセンス ファイルをアップロードして Docker Enterprise UCP 3.2.0 にアクセスします。 以下に示すように、WebUI:
ステップ 9: クラスタへのワーカーノードの追加
ワーカー ノードをクラスターに追加しましょう。 左側のペインの「共有リソース」をクリックし、「ノード」をクリックします。 [ノードの追加] を選択し、オーケストレーターを選択します。 以下に示すように、Linux ノードまたは Windows ノードをクラスターに追加することもできます。
Ubuntu 18.04と最新のDockerバイナリ(Docker EngineまたはDocker Enterpriseの無料バージョンのいずれか)がインストールされたワーカーノードがあることを前提としています。
@ubuntu1804-1:~$ sudo curl -sSL https://get.docker.com/ | sh $ sudo usermod -aG docker cs $ sudo docker swarm join --token SWMTKN-1-3n4mwkzhXXXXXXt2hip0wonqagmjtos-bch9ezkt5kiroz6jncid rz13x <managernodeip>:2377 This node joined a swarm as a worker.
これで、UCP の下に追加されたマネージャー ノードと 1 つのワーカー ノードの両方を確認できるはずです。
UCP ダッシュボードに、マネージャ ノードとワーカー ノードの両方に同様のホスト名があることを示す警告が表示された場合は、ワーカー ノードのホスト名を変更すると、UCP ダッシュボードで自動的に更新されます。
ステップ 10: Docker クライアントバンドルをインストールする
[ダッシュボード] をクリックし、下にスクロールして [Docker CLI] オプションを表示します。 このオプションを使用すると、クライアントバンドルをダウンロードして、Docker CLI クライアントを使用してサービスを作成および管理できます。 クリックすると、以下に示すように新しいウィンドウが表示されます。
「ユーザープロファイルページ」をクリックすると、以下のスクリーンショットに示すように 、https://<マネージャー-ip-node/管理/プロファイル/クライアントバンドル ページにリダイレクトされます。
「クライアントバンドルの生成」をクリックすると、 ucp-bundle-<username<username> がダウンロードされます>.zip
$ unzip ucp-bundle-ajeetraina.zip Archive: ucp-bundle-ajeetraina.zip extracting: ca.pem extracting: cert.pem extracting: key.pem extracting: cert.pub extracting: kube.yml extracting: env.sh extracting: env.ps1 extracting: env.cmd extracting: meta.json extracting: tls/docker/key.pem extracting: tls/kubernetes/ca.pem extracting: tls/kubernetes/cert.pem extracting: tls/kubernetes/key.pem extracting: tls/docker/ca.pem extracting: tls/docker/cert.pem @ubuntu1804-1:~$ eval "$(<env.sh)"
env スクリプトは、 DOCKER_HOST
環境変数 DOCKER_CERT_PATH
を更新して、Docker CLI クライアントが UCP と対話し、ダウンロードしたクライアント証明書を使用するようにします。 これ以降、Docker CLI クライアントを使用すると、UCP への要求の一部としてユーザー固有のクライアント証明書が含まれます。
ステップ11:Docker Enterprise 3.0にKubectlをインストールする
Kubernetes バージョンを入手したら、関連するオペレーティング システム用の kubectl クライアントをインストールします。 以下に示すように、Kubectlバージョン1.14.3をインストールする必要があります。
手順 12: Kubectl のバージョンを設定する
@ubuntu1804-1:~$ k8sversion=v1.14.3 @ubuntu1804-1:~$ curl -LO https://storage.googleapis.com/kubernetes-release/release/ $k8sversion/bin/linux/amd64/kubectl % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 41.1M 100 41.1M 0 0 7494k 0 0:00:05 0:00:05 --:--:-- 9070k @ubuntu1804-1:~$ chmod +x ./kubectl @ubuntu1804-1:~$ sudo mv ./kubectl /usr/local/bin/kubectl @ubuntu1804-1:~$
手順 13: Kubectl のインストールを確認する
~$ kubectl version Client Version: version.Info{Major:"1", Minor:"14", GitVersion:"v1.14.3", GitCommit: "5e53fd6bc17c0dec8434817e69b04a25d8ae0ff0", GitTreeState:"clean", BuildDate: "2019-06-06T01:44:30Z", GoVersion:"go1.12.5", Compiler:"gc", Platform:"linux/amd64"} Server Version: version.Info{Major:"1", Minor:"14+", GitVersion:"v1.14.3-docker-2", GitCommit:"7cfcb52617bf94c36953159ee9a2bf14c7fcc7ba", GitTreeState:"clean", BuildDate:"2019-06-06T16:18:13Z", GoVersion:"go1.12.5", Compiler:"gc", Platform:"linux/amd64"
ステップ 14: Kubernetes ノードをリストアップする
cse@ubuntu1804-1:~$ kubectl get nodes NAME STATUS ROLES AGE VERSION node2 Ready <none> 23h v1.14.3-docker-2 ubuntu1804-1 Ready master 23h v1.14.3-docker-2
手順 15: UCP で Helm と Tiller を有効にする
$ kubectl create rolebinding default-view --clusterrole=view --serviceaccount=kube-system :default --namespace=kube-system rolebinding.rbac.authorization.k8s.io/default-view created $ kubectl create clusterrolebinding add-on-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default clusterrolebinding.rbac.authorization.k8s.io/add-on-cluster-admin created cse@ubuntu1804-1:~$
ステップ16:Helmをインストールする
$ curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get > install-helm.sh % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 7001 100 7001 0 0 6341 0 0:00:01 0:00:01 --:--:-- 6347 $ chmod u+x install-helm.sh $ ./install-helm.sh Downloading https://get.helm.sh/helm-v2.14.3-linux-amd64.tar.gz Preparing to install helm and tiller into /usr/local/bin helm installed into /usr/local/bin/helm tiller installed into /usr/local/bin/tiller Run 'helm init' to configure helm. cse@ubuntu1804-1:~$ helm init Creating /home/cse/.helm Creating /home/cse/.helm/repository Creating /home/cse/.helm/repository/cache Creating /home/cse/.helm/repository/local Creating /home/cse/.helm/plugins Creating /home/cse/.helm/starters Creating /home/cse/.helm/cache/archive Creating /home/cse/.helm/repository/repositories.yaml Adding stable repo with URL: https://kubernetes-charts.storage.googleapis.com Adding local repo with URL: http://127.0.0.1:8879/charts $HELM_HOME has been configured at /home/cse/.helm. Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster. Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy. To prevent this, run `helm init` with the --tiller-tls-verify flag. For more information on securing your installation see: https://docs.helm.sh/using_helm/ #securing-your-helm-installation cse@ubuntu1804-1:~$
ステップ 17: Helm のインストールを確認する
$ helm version Client: &version.Version{SemVer:"v2.14.3", GitCommit:"0e7f3b6637f7af8fcfddb3d2941fcc7cbebb0085" , GitTreeState:"clean"} Server: &version.Version{SemVer:"v2.14.3", GitCommit:"0e7f3b6637f7af8fcfddb3d2941fcc7cbebb0085" , GitTreeState:"clean"}
ステップ 18: Docker Enterprise 3.0 で Helm を使用して MySQL をデプロイする
HelmPack を使用して MySQL をデプロイしてみましょう。
$ helm install --name mysql stable/mysql NAME: mysql LAST DEPLOYED: Wed Aug 7 11:43:01 2019 NAMESPACE: default STATUS: DEPLOYED RESOURCES: ==> v1/ConfigMap NAME DATA AGE mysql-test 1 0s ==> v1/PersistentVolumeClaim NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE mysql Pending 0s ==> v1/Secret NAME TYPE DATA AGE mysql Opaque 2 0s ==> v1/Service NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE mysql ClusterIP 10.96.77.83 <none> 3306/TCP 0s ==> v1beta1/Deployment NAME READY UP-TO-DATE AVAILABLE AGE mysql 0/1 0 0 0s NOTES: MySQL can be accessed via port 3306 on the following DNS name from within your cluster: mysql.default.svc.cluster.local To get your root password run: MYSQL_ROOT_PASSWORD=$(kubectl get secret --namespace default mysql -o jsonpath= "{.data.mysql-root-password}" | base64 --decode; echo) To connect to your database: 1. Run an Ubuntu pod that you can use as a client: kubectl run -i --tty ubuntu --image=ubuntu:16.04 --restart=Never -- bash -il 2. Install the mysql client: $ apt-get update && apt-get install mysql-client -y 3. Connect using the mysql cli, then provide your password: $ mysql -h mysql -p To connect to your database directly from outside the K8s cluster: MYSQL_HOST=127.0.0.1 MYSQL_PORT=3306 # Execute the following command to route the connection: kubectl port-forward svc/mysql 3306 mysql -h ${MYSQL_HOST} -P${MYSQL_PORT} -u root -p${MYSQL_ROOT_PASSWORD} cse@ubuntu1804-1:~$
ステップ 19: リリースをリストアップする
このコマンドは helm list
、すべてのリリースをリストします。 既定では、デプロイされたリリースまたは失敗したリリースのみが一覧表示されます。 フラグは、この動作を好き ‘–deleted’
で変更 ‘–all’
します。 このようなフラグは、次のものを組み合わせることができます。 ‘–deleted –failed’
既定では、項目はアルファベット順に並べ替えられます。 フラグを使用して、 ‘-d’
リリース日で並べ替えます。
$ helm list NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE mysql 1 Wed Aug 7 11:43:01 2019 DEPLOYED mysql-1.3.0 5.7.14 default $ kubectl get po,deploy,svc NAME READY STATUS RESTARTS AGE pod/mysql-6f6bff58d8-t2kwm 1/1 Running 0 5m35s NAME READY UP-TO-DATE AVAILABLE AGE deployment.extensions/mysql 1/1 1 0 5m35s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 28h service/mysql ClusterIP 10.96.77.83 <none> 3306/TCP 5m35s cse@ubuntu1804-1:~$
DKS を使用すると、Docker Enterprise 3.0 の UCP で Helm を完璧に使用できます。
Kubernetes, On-Premises
これで、オンプレミスで Kubernetes を実行できるようになりました。 ここから多くのことができますが、このシリーズの残りの部分でいくつかの可能性について説明します。
また、Kubernetes で最初のアプリケーションの設計を試すこともできます。 DockerトレーニングチームのBill Millsは、最近、まさにそれをカバーする素晴らしいブログシリーズを書きました。 ここでパート1からチェックすることを強くお勧めします。
Docker Enterprise 3.0 と Kubernetes の詳細については、次のリソースを参照してください。
- Play with Kubernetes をお試しください。
- Docker Kubernetes Service をお試しください。