ドキュメント
- ホストPC(virt-manager:KVM/QEMU)(192.168.1.100)
- ブリッジネットワーク(ホストを有線ネットワーク接続:192.168.1.0/24)
- Master-Node: k3s server (192.168.1.10)
- Worker-Node: k3s worker (複数可) (192.168.1.20)
- VM3: NFS(共有ファイルサーバ)(192.168.1.30)
- ホストPCと同一LAN内の別PC: (192.168.1.200)
- デュアルスタック(IPv4,IPv6)
- K3sデフォルトのIngress:traefikは使わない —> Ingress-Nginx
- K3sデフォルトのCNIプラグイン:flannelは使わない —> Calico
- K3sデフォルトのロードバランサー:ServiceLBは使う—> 代替:MetalLB
注) 各VMはホストとブリッジ接続するため、IPアドレスはホストと同じDHCPサーバから付与されます。ホストと各VMでNetplanの設定が必須。
注) サーバノード、エージェントノードにK3sをインストールするスクリプトについては次の投稿記事参照。
ホストPC: 192.168.1.100 での作業
ブリッジ接続するための設定(Netplan)は下記リンク先参照
minikubeで作成したマニフェストのコピー
(virt-managerで作成したNFS-VMの共有ディレクトリにコピー)
$ scp -r ./ [email protected]:/home/xxx/~
Master-Node: 192.168.1.10 での作業
NetplanでIPv6対応、SHCPを有効にして再起動
network:
version: 2
ethernets:
enp1s0:
dhcp4: yes
dhcp6: yes
再起動後K3sのインストール
$ curl -sfL https://get.k3s.io | sh -
Ingress-Nginxのインストール
$ sudo kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.12.3/deploy/static/provider/baremetal/deploy.yaml
NodePortでポートがランダムに割当てられるため固定ポートを指定します。
新しいマニフェストを作成するか既存の設定を編集します。
マニフェスト:
$ sudo nano ingress-nginx-service.yaml
apiVersion: v1
kind: Service
metadata:
name: ingress-nginx-controller
namespace: ingress-nginx
spec:
type: NodePort
selector:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/component: controller
ports:
- name: http
port: 80
targetPort: http
nodePort: 30080
- name: https
port: 443
targetPort: https
nodePort: 30443
適用
$ sudo kubectl apply -f ingress-nginx-service.yaml
既存マニフェストを編集する場合
$ sudo kubectl edit service ingress-nginx-controller -n ingress-nginx
以下のnodePortの箇所を変更
ports:
- name: http
nodePort: 30080
port: 80
protocol: TCP
targetPort: http
- name: https
nodePort: 30443
port: 443
protocol: TCP
targetPort: https
Worker-Node用トークン取得
$ sudo cat /var/lib/rancher/k3s/server/node-token
注)取得したトークンは、後ほどワーカノード内で使用します。
Cert-Managerのインストール
$ sudo kubectl apply -f https://github.com/cert-manager/cert-manager/releases/latest/download/cert-manager.yaml
CloudflareへアクセスするためのAPIトークンをSecretへ登録
$ sudo kubectl create secret generic cloudflare-api-token-secret --from-literal=api-token='YOUR_CLOUDFLARE_API_TOKEN' --namespace=cert-manager
ClusterIssuer適用
$ sudo kubectl apply -f cluster-issuer.yaml
Ingress適用
$ sudo kubectl apply -f ingress.yaml
認証ステータス確認
$ sudo kubectl get certificate
Worker-Node: 192.168.1.20 での作業
Master-Nodeから取得したトークンを指定してk3sをインストール
$ curl -sfL https://get.k3s.io | K3S_URL=https://192.168.1.10:6443 K3S_TOKEN=K10f8d5...abcdef sh -
設定(IPアドレス)を変更する場合
K3sサービス停止
$ sudo systemctl stop k3s-agent
環境変数で設定されている場合、サービスファイルを確認
$ sudo systemctl cat k3s-agent
[Service]
Type=notify
EnvironmentFile=-/etc/default/%N
EnvironmentFile=-/etc/sysconfig/%N
EnvironmentFile=-/etc/systemd/system/k3s-agent.service.env
環境変数を変更(IPアドレス変更)
$ sudo nano /etc/systemd/system/k3s-agent.service.env
K3S_TOKEN='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
K3S_URL='https://192.168.1.10:6443'
サービスを起動
$ sudo systemctl start k3s-agent
Master-Node: 192.168.1.10 での作業
ノード確認
$ sudo kubectl get nodes
NAME STATUS ROLES AGE VERSION
master-node Ready control-plane,master 23h v1.32.5+k3s1
worker-node001 Ready <none> 23h v1.32.5+k3s1
containerd (k3s内部) 直接確認
$ sudo crictl ps
$ sudo crictl logs <container-id>
K3sアンインストール(サーバ、エージェント)
$ sudo /usr/local/bin/k3s-uninstall.sh
$ sudo /usr/local/bin/k3s-agent-uninstall.sh