OrbStack 0.17からnativeなKubernetesサポートが追加されました。
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 <none> 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 <none> <none>
kube-system coredns-687f7d69ff-65qsk 1/1 Running 0 2m46s 192.168.194.2 orbstack <none> <none>
$ kubectl get svc -A -owide
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
default kubernetes ClusterIP 192.168.194.129 <none> 443/TCP 3m13s <none>
kube-system kube-dns ClusterIP 192.168.194.138 <none> 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 <none> <none>
このPodにブラウザから直接アクセスできます(!)。
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 <none> 80/TCP 13s run=nginx
このCluster IPもブラウザから直接アクセスできます(!)。。
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でももちろんブラウザでアクセスできます。
type=LoadBalancerなServiceを作るとkube-system
namespaceに一つ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 <none> <none>
kube-system coredns-687f7d69ff-65qsk 1/1 Running 0 20m 192.168.194.2 orbstack <none> <none>
default nginx 1/1 Running 0 14m 192.168.194.4 orbstack <none> <none>
kube-system svclb-nginx-967169ac-ppsvd 1/1 Running 0 4m16s 192.168.194.5 orbstack <none> <none>
GUIをみるとtype=LoadBalancerのServiceはオレンジ色のアイコンになり、アドレスとして*.k8s.orb.local
がマッピングされていることがわかります。
ホスト名でもアクセス可能です。DNSの設定をすることなくIngressの検証を行えそうです。