---
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?)が使えます。チェックボックスを入れるだけです。


<img width="652" src="https://github.com/making/blog.ik.am/assets/106908/5972ea66-1ec0-4420-9194-ad3354d97f52">


初期状態は次の通りです。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にブラウザから直接アクセスできます(!)。

<img width="1912" alt="image" src="https://github.com/making/blog.ik.am/assets/106908/af0c86dc-8a80-44a4-89fc-93ea0e474d00">

GUIからもこのIPにジャンプすることができます。

<img width="1012" src="https://github.com/making/blog.ik.am/assets/106908/b518082c-f170-4cd4-a0ad-d674213f4b06">

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もブラウザから直接アクセスできます(!)。。

<img width="1912" alt="image" src="https://github.com/making/blog.ik.am/assets/106908/88184ddb-216a-4e72-b6e9-e82e4ff5a3c0">

GUIでServiceの情報も見れます。

<img width="1012" src="https://github.com/making/blog.ik.am/assets/106908/c44e1445-bf79-4afd-860a-4d50d74722d1">

🔗アイコンをクリックすることで直接ブラウザでアクセスすることもできます。

<img width="1012" src="https://github.com/making/blog.ik.am/assets/106908/af29d5ab-a4a8-4ec1-ae5d-65c1070377f4">


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でももちろんブラウザでアクセスできます。

<img width="1912" alt="image" src="https://github.com/making/blog.ik.am/assets/106908/757db006-9b32-4c4d-af47-19ee54d66172">

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   <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`がマッピングされていることがわかります。

<img width="1012" src="https://github.com/making/blog.ik.am/assets/106908/37ba3de5-f76b-41e0-a033-6c57152e4fd7">

ホスト名でもアクセス可能です。DNSの設定をすることなくIngressの検証を行えそうです。

<img width="1912" alt="image" src="https://github.com/making/blog.ik.am/assets/106908/498ad436-a931-4ba3-b8c4-03158017af37">
