--- title: OrbStackのnative Kubernetesサポート tags: ["Docker", "OrbStack", "Kubernetes"] categories: ["Dev", "Infrastructure", "Docker", "OrbStack"] date: 2023-09-01T05:04:18Z updated: 2023-09-01T05:05:12Z --- OrbStack 0.17からnativeなKubernetesサポートが追加されました。 * https://docs.orbstack.dev/kubernetes/ * https://docs.orbstack.dev/release-notes#v0-17-0 OrbStack上でkindを立てなくても、すぐにKubernetes (k3s?)が使えます。チェックボックスを入れるだけです。 初期状態は次の通りです。Container RuntimeがDockerな点に注意が必要かもしれません。 ``` $ kubectl cluster-info Kubernetes control plane is running at https://127.0.0.1:26443 CoreDNS is running at https://127.0.0.1:26443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'. $ kubectl get node -owide NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME orbstack Ready control-plane,master 6m13s v1.27.4+orb1 198.19.249.2 OrbStack 6.4.13-orbstack-00090-ga4cfdc88d4df docker://24.0.5 $ kubectl get ns NAME STATUS AGE default Active 66s kube-system Active 66s kube-public Active 66s kube-node-lease Active 66s $ kubectl get pod -A -owide NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES kube-system local-path-provisioner-957fdf8bc-tff28 1/1 Running 0 2m46s 192.168.194.3 orbstack kube-system coredns-687f7d69ff-65qsk 1/1 Running 0 2m46s 192.168.194.2 orbstack $ kubectl get svc -A -owide NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR default kubernetes ClusterIP 192.168.194.129 443/TCP 3m13s kube-system kube-dns ClusterIP 192.168.194.138 53/UDP,53/TCP,9153/TCP 3m10s k8s-app=kube-dns $ kubectl get storageclass NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE local-path (default) rancher.io/local-path Delete WaitForFirstConsumer false 73s ``` kindと違って、Node、Pod、ServiceのIPがRoutableです。 例えば次のようにMacのターミナルから直接CoreDNSに`dig`で問い合わせすることができます(!)。 ``` $ dig @192.168.194.138 kubernetes.default.svc.cluster.local +short 192.168.194.129 ``` Podを立ててみます。 ``` kubectl run nginx --image=nginx ``` ``` $ kubectl get pod -owide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx 1/1 Running 0 9s 192.168.194.4 orbstack ``` このPodにブラウザから直接アクセスできます(!)。 image GUIからもこのIPにジャンプすることができます。 Serviceを作成してみます。 ``` kubectl expose pod nginx --type=ClusterIP --port=80 ``` ``` $ kubectl get svc nginx -owide NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR nginx ClusterIP 192.168.194.192 80/TCP 13s run=nginx ``` このCluster IPもブラウザから直接アクセスできます(!)。。 image GUIでServiceの情報も見れます。 🔗アイコンをクリックすることで直接ブラウザでアクセスすることもできます。 ClusterIPでもRoutableなのでtype=LoadBalancerにしてExternal IPを使用する必要は必ずしもありませんが、type=LoadBalancerも使用することができます。 ``` kubectl delete svc nginx kubectl expose pod nginx --type=LoadBalancer --port=80 ``` ``` $ kubectl get svc nginx NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx LoadBalancer 192.168.194.153 198.19.249.2 80:30755/TCP 7s ``` External IPでももちろんブラウザでアクセスできます。 image type=LoadBalancerなServiceを作ると`kube-system` namespaceに一つ[Klipper LB](https://github.com/k3s-io/klipper-lb)のPodができます。 ``` $ kubectl get pod -A -owide NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES kube-system local-path-provisioner-957fdf8bc-tff28 1/1 Running 0 20m 192.168.194.3 orbstack kube-system coredns-687f7d69ff-65qsk 1/1 Running 0 20m 192.168.194.2 orbstack default nginx 1/1 Running 0 14m 192.168.194.4 orbstack kube-system svclb-nginx-967169ac-ppsvd 1/1 Running 0 4m16s 192.168.194.5 orbstack ``` GUIをみるとtype=LoadBalancerのServiceはオレンジ色のアイコンになり、アドレスとして`*.k8s.orb.local`がマッピングされていることがわかります。 ホスト名でもアクセス可能です。DNSの設定をすることなくIngressの検証を行えそうです。 image