microk8sでKuberneteusを建てる
#作業ログ
hr.icon
ref
Ubuntuに軽量KubernetesクラスターのMicroK8sをインストールしてKubernetesを体験してみよう #kubernetes - Qiita
microk8sを入れる
sudo snap install microk8s --classic
ユーザーグループに追加する
code:sh
sudo usermod -a -G microk8s $USER
sudo chown -f -R $USER ~/.kube
基本のアドオン
code:sh
microk8s enable dns
microk8s enable dashboard
microk8s enable storage
眺める
code:sh
microk8s status
microk8s kubectl get node
dashboardを外から見れるようにする
microk8sのdashboardの使い方 #Linux - Qiita
code:sh
microk8s dashboard-proxy
microk8sでdashboardを使ってみる
code:sh
microk8s kubectl port-forward -n kube-system service/kubernetes-dashboard --address 0.0.0.0 10443:443
どうやらずっと外でみるもんじゃないらしい
試しにShlink — The URL shortenerを建ててみる
Helmを入れる
code:sh
microk8s.helm3 init
ArgoCDを入れる
code:sh
microk8s.enable argocd
communityもいるらしい
code:sh
Addon argocd was not found in any repository
To use the community maintained flavor enable the respective repository:
microk8s enable community
code:sh
microk8s enable community
Helmチャートを作る
どんな感じにデプロイするかを示す設計図的なアレらしい
AIに書かせてみる
code:values.yaml
image:
repository: shlinkio/shlink
tag: latest
service:
type: ClusterIP
port: 80
code:templates/service.yaml
apiVersion: v1
kind: Service
metadata:
name: shlink
spec:
type: "{{ .Values.service.type }}"
ports:
- port: "{{ .Values.service.port }}"
targetPort: 80
code:templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: shlink
spec:
replicas: 1
template:
spec:
containers:
- name: shlink
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
ArgoCDを設定する
勝手にできている初期パスワードを持ってくる
code:sh
microk8s.kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d
UIをポートフォワードする(これで:8080ではいれる)
code:sh
$ microk8s.kubectl -n argocd port-forward svc/argocd-server 8080:443
Error from server (NotFound): services "argocd-server" not found
うーん
code:sh
$ microk8s.kubectl get svc -n argocd
NAME TYPE
argo-cd-argocd-applicationset-controller ClusterIP
argo-cd-argocd-dex-server ClusterIP
argo-cd-argocd-redis ClusterIP
argo-cd-argocd-repo-server ClusterIP
argo-cd-argocd-server ClusterIP
あっ
code:sh
$ microk8s.kubectl -n argocd port-forward svc/argo-cd-argocd-server 8800:443
Forwarding from 127.0.0.1:8800 -> 8080
正解
どうやらlocalhostじゃないとだめらしい
しょうがないからssh -L 8800:127.0.0.1:8800 -N ariaした
https://localhost:8800
wkwk
きたー
table:設定
Application Name shlink
Project default
RepositoryUrl https://github.com/your-username/your-repo-name.git
SyncPolicy Auto
Cluster https://kubernetes.default.svc
Namespace default
Prune Resource true
SelfHeal true
プライベートrepoにしたかった
ArgoCDからGithubのPrivate Repositoryに対して、SSH keyを使って接続する
code:sh
ssh-keygen -t ed25519 -f ./argo
DeployKeyをリポジトリに登録
ArgoCD>Settings>Repo>Connect Repo
Createした
よさげ
https://gyazo.com/1e89bcdfa8291f610b5cf3a3c217d559
公開する
Ingressをいれる
code:sh
microk8s.enable ingress
Ingressなマニフェストを(AIが)書く
code:templates/ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: shlink-ingress
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: "false" # SSLリダイレクトを無効化
spec:
rules:
- host: a.wsoft.ws
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: shlink # ShlinkのService名
port:
number: 80 # ShlinkのServiceポート
DNSをいいかんじに
code:sh
$ microk8s.kubectl get svc ingress -n ingress
Error from server (NotFound): services "ingress" not found
お?
わからないのでdisable->enableする
code:sh
microk8s.disable ingress
microk8s.enable ingress
あとはCloudflareのAレコを向ける
なんかデプロイされてなくね
dashboardにpodsがない
ArgoCDはHealthy
とおもたらパスにChart.yamlがなかった
code:Chart.yaml
apiVersion: v2
name: shlink
description: A Helm chart for deploying Shlink
version: 0.1.0
appVersion: "5.2.0" # こっちはappのバージョンを探す
appVersionは↓↓
shlink 5.2.0 · funkypenguin/geek-cookbook
エラーになった
Service in version "v1" cannot be handled as a Service: json: cannot unmarshal string into Go struct field ServicePort.spec.ports.port of type int32
こうか
code:template/service.yaml
apiVersion: v1
kind: Service
metadata:
name: shlink
spec:
type: {{ .Values.service.type }}
ports:
- port: {{ .Values.service.port }}
targetPort: {{ .Values.service.port }}
Pretierがカスやった
* YAML用になんとかする
deploymentもまちがってた
code:template/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: shlink
spec:
replicas: {{ .Values.replicaCount }} # values.yamlの値
selector:
matchLabels:
app: shlink
template:
metadata:
labels:
app: shlink
spec:
containers:
- name: shlink
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
ports:
- containerPort: 8000 # Shlinkのデフォルトポート
deployできるまで待機〜
deployできた
Ingressみると503
code:ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: shlink-ingress
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: "false"
spec:
rules:
- host: a.wsoft.ws
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: shlink
port:
number: 8080
port:number:8080じゃないか
ingressの様子をみる
code:sh
$ kubectl describe service shlink
Endpoints: <none>
Selectorを明示する
code:template/service.yml
selector:
app: shlink # <-- Podのラベルと一致させる
完成!
Shlink — The URL shortener
APIキーは
code:sh
$ microk8s.kubectl get pods
abchoge
$ microk8s.kubectl exec -it abchoge -- php bin/cli api-key:generate
<キー>
$ microk8s.kubectl create secret generic shlink-api-key --from-literal=api-key="<キー>"