# [雑記]
K3s で Kubernetes クラスターを作ってみた


published: 2026-10-03

Kubernetes の勉強のために。
いわゆる軽量ディストリビューションの一つである K3s でクラスターを作ってみる。


## 前提

Kubernetes 初心者の雑記です。

EC2 でインスタンス（AL2023）を立ち上げ
K3s でクラスターをセットアップして、Service を立ち上げてみます。


outline

- ・クラスターの立ち上げ
- ・Service を立ち上げ
- ・ルーティング
- ・動作確認

## クラスターの立ち上げ

K3s をインストールして
Kubernetes のクラスターをセットアップします


```bash
# k3s
curl -sfL https://get.k3s.io | sh -
k3s kubectl get nodes

# kubeconfig
mkdir -p ~/.kube
cp /etc/rancher/k3s/k3s.yaml ~/.kube/config
chown $USER:$USER ~/.kube/config
kubectl get nodes

```

![./sk3ssetup.png](https://lab.enuesaa.dev/prototype/kubernetes-k3s-al2023-pods/./sk3ssetup.png)

公式ガイド


- [https://docs.k3s.io/quick-start](https://docs.k3s.io/quick-start)
## Service を立ち上げ

下記の Service を立ち上げます
・Nginx
・Python3 のサンプルアプリ


## マニフェスト

### `ingress.yaml`

```yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: routing
spec:
  rules:
    - host: nginx.example.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: nginx
                port:
                  number: 80
    - host: app.example.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: python3app
                port:
                  number: 8000

```

### `nginx.yaml`

```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx
          ports:
            - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: nginx
spec:
  type: NodePort
  selector:
    app: nginx
  ports:
    - port: 80
      targetPort: 80

```

### `python3app.yaml`

```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: python3app
spec:
  replicas: 2
  selector:
    matchLabels:
      app: python3app
  template:
    metadata:
      labels:
        app: python3app
    spec:
      containers:
        - name: python3app
          image: python:3-alpine
          command: ["python3", "-m", "http.server", "8000"]
          ports:
            - containerPort: 8000
---
apiVersion: v1
kind: Service
metadata:
  name: python3app
spec:
  type: NodePort
  selector:
    app: python3app
  ports:
    - port: 8000
      targetPort: 8000

```

### memos

Nginx 


mark: `nginx.yaml:1`

Python3 のサンプルアプリ。http.server を立ち上げるだけです


mark: `python3app.yaml:1`

まずは Nginx の Service を立ち上げます


```bash
vim nginx.yaml
kubectl apply -f nginx.yaml
kubectl get pods

```

![snginx.png](https://lab.enuesaa.dev/prototype/kubernetes-k3s-al2023-pods/snginx.png)

同じようにして Python3 のサンプルアプリの Service を立ち上げます


```bash
vim python3app.yaml
kubectl apply -f python3app.yaml
kubectl get pods

```

![spython3app.png](https://lab.enuesaa.dev/prototype/kubernetes-k3s-al2023-pods/spython3app.png)

## ルーティング

続いて、
クラスターの外からアクセスできるよう Ingress Controller にて Service へルーティングします


```bash
vim ingress.yaml
kubectl apply -f ingress.yaml
kubectl get ingress

```

![singress.png](https://lab.enuesaa.dev/prototype/kubernetes-k3s-al2023-pods/singress.png)

## 動作確認

クラスター外から疎通確認します。
EC2 の Public IP アドレスへ curl でリクエストを投げます。


![scurl.png](https://lab.enuesaa.dev/prototype/kubernetes-k3s-al2023-pods/scurl.png)

Host ヘッダの値を見て、
Ingress Controller (Traefik) でリクエストが振り分けられ、各 Service の Pod へ流れて、
レスポンスが返ってきている、という理解です。


