---
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にブラウザから直接アクセスできます(!)。
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もブラウザから直接アクセスできます(!)。。
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](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の検証を行えそうです。