Ubuntu(WSL2)にK8sのローカル開発環境を構築
はじめに
- Kubernetesで動くシステムのローカル開発環境構築のため、KinD(Kubernetes in Docker)、k9sのインストール方法と、NGINX Ingress Controllerが動作していることを確認した
環境
- Windows11 WSL2 Ubuntu
前提
- WSL2、Ubuntuをインストール済み
- UbuntuにDockerをインストール済み
手順
環境構築
- WSL2を立ち上げ、Dockerがインストールされていることを確認
- WSL2環境の立ち上げ、Dockerのインストール手順の詳細はこちら:WindowsでLinux(WSL2)+Docker+VSCodeでの開発環境を構築
kubectlコマンドをインストール$ curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"- 下記のコマンドを実行してCommand not foundにならなければ、インストール成功
$ kubectl version - 参考:https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/
- 下記のコマンドを実行してCommand not foundにならなければ、インストール成功
k9sのインストール$ curl -L https://github.com/derailed/k9s/releases/download/v0.26.7/k9s_Linux_x86_64.tar.gz -o k9s$ tar -xf k9s$ chmod +x k9s$ sudo mv ./k9s /usr/local/bin/k9s- 下記のコマンドを実行してCommand not foundにならなければ、インストール成功
$ k9s version - 参考:https://github.com/derailed/k9s/releases、https://gist.github.com/bplasmeijer/a4845a4858f1c0b0a22848984475322d
- 下記のコマンドを実行してCommand not foundにならなければ、インストール成功
- KinDのインストール
$ curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.17.0/kind-linux-amd64$ chmod +x ./kind$ sudo mv ./kind /usr/local/bin/kind- 下記のコマンドを実行してCommand not foundにならなければ、インストール成功
$ kind version - 参考:https://kind.sigs.k8s.io/docs/user/quick-start
- 下記のコマンドを実行してCommand not foundにならなければ、インストール成功
NGINX ingress controllerで動作確認
参考:https://kind.sigs.k8s.io/docs/user/ingress/
- kindのclusterを作成
$ cat <<EOF | kind create cluster --config=-
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
kubeadmConfigPatches:
- |
kind: InitConfiguration
nodeRegistration:
kubeletExtraArgs:
node-labels: "ingress-ready=true"
extraPortMappings:
- containerPort: 80
hostPort: 80
protocol: TCP
- containerPort: 443
hostPort: 443
protocol: TCP
EOF kubectlの現在のcontextがkind-kindであることを確認$ kubectl config current-contextkind-kind- NGINX ingress controllerをインストール
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/kind/deploy.yaml $ k9sを実行し、ingress-nginx-controllerがRUNNINNG状態になることを確認
- 下記のコマンドを実行
$ kubectl wait --namespace ingress-nginx \
--for=condition=ready pod \
--selector=app.kubernetes.io/component=controller \
--timeout=90s - app.ymlというファイルを作成(内容は後述)し、下記のコマンドを実行
$ kubectl apply -f app.yml- app.ymlをコマンドを実行するディレクトリと別の場所に作成した場合、相対パスか絶対パスでファイルを指定する
- app.ymlの内容は下記
kind: Pod
apiVersion: v1
metadata:
name: foo-app
labels:
app: foo
spec:
containers:
- command:
- /agnhost
- netexec
- --http-port
- "8080"
image: registry.k8s.io/e2e-test-images/agnhost:2.39
name: foo-app
---
kind: Service
apiVersion: v1
metadata:
name: foo-service
spec:
selector:
app: foo
ports:
# Default port used by the image
- port: 8080
---
kind: Pod
apiVersion: v1
metadata:
name: bar-app
labels:
app: bar
spec:
containers:
- command:
- /agnhost
- netexec
- --http-port
- "8080"
image: registry.k8s.io/e2e-test-images/agnhost:2.39
name: bar-app
---
kind: Service
apiVersion: v1
metadata:
name: bar-service
spec:
selector:
app: bar
ports:
# Default port used by the image
- port: 8080
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
rules:
- http:
paths:
- pathType: Prefix
path: /foo(/|$)(.*)
backend:
service:
name: foo-service
port:
number: 8080
- pathType: Prefix
path: /bar(/|$)(.*)
backend:
service:
name: bar-service
port:
number: 8080
---
この後、$ curl localhost/fooおよび$ curl localhost/barで時刻が返ってきたら成功





ディスカッション
コメント一覧
まだ、コメントがありません