k3d
- Kubernetes
- k3sは1ノード専門だけれど、そのk3sを複数ノードで起動してクラスタ化してくれる
- Docker上で動き、1つのノードが1コンテナ扱いで起動される
環境
- AWS EC2
- Amazon Linux 2
Dockerが動いていれば、Macでもいける模様
前提条件
1 2 |
yum -y install docker systemctl start docker |
k3dインストール
1 2 |
curl -s https://raw.githubusercontent.com/rancher/k3d/master/install. sh | バッシュ |
kubectlインストール
1 2 3 4 5 6 |
curl -LO https://storage.googleapis.com/kubernetes-release/release/ `curl -s https://storage.googleapis.com/kubernetes-release/release/ stable.txt`/bin/linux/amd64/ kubectl chmod + x ./kubectl sudo mv ./kubectl / usr / local / bin / kubectl kubectlのバージョン |
クラスタ作成
1 |
k3d作成 |
環境変数
1 |
KUBECONFIG = $(k3d get-kubeconfig)をエクスポート |
ポッド確認
1 |
kubectl get pods --all-namespaces |
削除
1 |
k3d削除 |
nginxを活用してみるテスト
nginx-deployment.yaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<span class="na">apiVersion </span><span class="pi">:</span> <span class="s">拡張/ v1beta1 </span> <span class="na">種類</span><span class="pi">:</span> <span class="s">展開の</span> <span class="na">メタデータ</span><span class="pi">:</span> <span class="na">名前</span><span class="pi">:</span> <span class="s">nginxの</span> <span class="na">スペック</span><span class="pi">:</span> <span class="na">レプリカ</span><span class="pi">:</span> <span class="m">1つの</span> <span class="na">テンプレート</span><span class="pi">:</span> <span class="na">メタデータ</span><span class="pi">:</span> <span class="na">ラベル</span><span class="pi">:</span> <span class="na">アプリ</span><span class="pi">:</span> <span class="s">nginxの</span> <span class="na">仕様</span><span class="pi">:</span> <span class="na">コンテナ</span><span class="pi">:</span> <span class="pi">- </span> <span class="na">名前</span><span class="pi">:</span> <span class="s">nginxの</span> <span class="na">画像</span><span class="pi">:</span> <span class="s">nginxの:1.7.5 </span> <span class="na">ポート</span><span class="pi">:</span> <span class="pi">- </span> <span class="na">containerPort </span><span class="pi">:</span> <span class="m">80</span> |
展開
1 |
kubectl apply -f nginx-deployment.yaml |
Podへ接続するためのサービス配備
1 2 |
kubectlがdeployment / nginx --type = "NodePort" --port 80を公開します kubectl get service |
拒否される
1 2 |
[root @ ip-172-31-47-223〜]#curl -i http:// localhost:30757 curl:(7)localhostポート30757への接続に失敗:接続が拒否されました |
再チャレンジ
公式ドキュメントをみるとIngressとNodePortでの展開方法が説明されている
イングレス
1 2 3 4 |
k3d create --api-port 6550 --publish 8081:80 --workers 2 エクスポートKUBECONFIG = "$(k3d get-kubeconfig --name = 'k3s-default')" kubectl create deployment nginx --image = nginx kubectl create service clusterip nginx --tcp = 80:80 |
nginx-ingress.yaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<span class="na">apiVersion </span><span class="pi">:</span> <span class="s">拡張/ v1beta1 </span> <span class="na">種類</span><span class="pi">:</span> <span class="s">イングレスの</span> <span class="na">メタデータ</span><span class="pi">:</span> <span class="na">名前</span><span class="pi">:</span> <span class="s">nginxの</span> <span class="na">注釈</span><span class="pi">:</span> <span class="s">ingress.kubernetes.io/ssl-redirect </span><span class="pi">:</span> <span class="s2">" </span><span class="s">偽" </span> <span class="na">スペック</span><span class="pi">:</span> <span class="na">ルール</span><span class="pi">:</span> <span class="pi">- </span> <span class="na">のhttp </span><span class="pi">:</span> <span class="na">パス</span><span class="pi">:</span> <span class="pi">- </span> <span class="na">パス</span><span class="pi">:</span> <span class="s">/ </span> <span class="na">バックエンド</span><span class="pi">:</span> <span class="na">serviceNameは</span><span class="pi">:</span> <span class="s">nginxの</span> <span class="na">SERVICEPORT </span><span class="pi">:</span> <span class="m">80</span> |
1 |
kubectl apply -f nginx-ingress.yaml |
1 |
curl localhost:8081 / |
1 |
k3d削除 |
NodePort
NodePortのPortへ直接アクセスしても接続できない。
下のコマンドの場合、NodePortのポートをローカルのポートと紐づけてあげるということをしているみたい。よくよく考えてみると、ローカル
ではなくDocker上で動作をしているので、このような操作が必要なのかも。
1 |
k3d create --publish 8082:30080 @ k3d-k3s-default-worker-0 --workers 2 |
dockerコンテナの数は3つで、デフォルトサーバ1つとワーカー2つ
1 2 3 4 5 6 7 8 |
[root @ ip-172-31-47-223〜]#docker ps コンテナーIDイメージコマンド作成されたステータスポート名 da228d6d1786 rancher / k3s:v0.7.0 "/ bin / k3s agent" 23分前アップ23分k3d-k3s-default-worker-1 b68c0032047f rancher / k3s:v0.7.0 "/ bin / k3s agent" 23分前に23分前0.0.0.0:8082->30080/tcp k3d-k3s-default-worker-0 f2209b7494ea rancher / k3s:v0.7.0 "/ bin / k3s server --h…" 23分前に23分0.0.0.0:6443->6443/tcp k3d-k3s-default-server |
1 |
エクスポートKUBECONFIG = "$(k3d get-kubeconfig --name = 'k3s-default')" |
1 |
kubectl create deployment nginx --image = nginx |
nginx-nodeport.yaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<span class="na">apiVersion </span><span class="pi">:</span> <span class="s">v1 </span> <span class="na">種類</span><span class="pi">:</span> <span class="s">サービス</span> <span class="na">メタデータ</span><span class="pi">:</span> <span class="na">ラベル</span><span class="pi">:</span> <span class="na">app </span><span class="pi">:</span> <span class="s">nginx </span> <span class="na">名前</span><span class="pi">:</span> <span class="s">nginx </span> <span class="na">仕様</span><span class="pi">:</span> <span class="na">ポート</span><span class="pi">:</span> <span class="pi">- </span> <span class="na">名前</span><span class="pi">:</span> <span class="s">80-80 </span> <span class="na">nodePort </span><span class="pi">:</span> <span class="m">30080 </span> <span class="na">ポート</span><span class="pi">:</span> <span class="m">80 </span> <span class="na">プロトコル</span><span class="pi">:</span> <span class="s">TCP </span> <span class="na">targetPort </span><span class="pi">:</span> <span class="m">80 </span> <span class="na">セレクター</span><span class="pi">:</span> <span class="na">app </span><span class="pi">:</span> <span class="s">nginx </span> <span class="na">タイプ</span><span class="pi">:</span> <span class="s">NodePort</span> |
1 |
kubectl apply -f nginx-nodeport.yaml |
1 |
curl localhost:8082 / |
1 |
k3s削除 |