因為之前一直用不習慣github page上架的hexo
,因為他的更新時間真的是太慢了,但是
如果直接用hexo server的話又感覺很容易斷線,所以剛好趁著過年閒閒,就順變研究一
下k8s了,這兩天也在把我的hexo next架設到k8s上。
把碰到的坑都寫一下
預先準備
- 一台server
- 兩個public ip (計中拿的,老香了)
- 一個自己的
domain name
setting up for debian
Install kubelet kubeadm
kubectl
toturial
First , you will need to update the data
setting up repositry
1 2
| export KUBERNETES_VERSION=v1.32 export CRIO_VERSION=v1.32
|
replace v1.32 to your version In root
permission 1 2 3 4 5 6 7 8
| curl -fsSL https://pkgs.k8s.io/core:/stable:/$KUBERNETES_VERSION/deb/Release.key | gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg echo deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/$KUBERNETES_VERSION/deb/ / | tee /etc/apt/sources.list.d/kubernetes.list curl -fsSL https://pkgs.k8s.io/addons:/cri-o:/stable:/$CRIO_VERSION/deb/Release.key | gpg --dearmor -o /etc/apt/keyrings/cri-o-apt-keyring.gpg echo deb [signed-by=/etc/apt/keyrings/cri-o-apt-keyring.gpg] https://pkgs.k8s.io/addons:/cri-o:/stable:/$CRIO_VERSION/deb/ / | tee /etc/apt/sources.list.d/cri-o.list
|
Prequirement
永久
- In /etc/fstab
- enable br_netfilter at boot
- echo br_netfilter | sudo tee
/etc/modules-load.d/br_netfilter.conf
- in /etc/sysctl.conf
- net.ipv4.ip_forward=1
- sudo sysctl --system to apply change
暫時 1 2 3
| swapoff -a modprobe br_netfilter sysctl -w net.ipv4.ip_forward=1
|
Install kubeadm, kubectl
1 2 3
| sudo apt update sudo apt install -y kubelet kubeadm kubectl sudo apt-mark hold kubelet kubeadm kubectl
|
Start the kubernetes
1 2 3
| sudo apt install cri-o cri-o-runc systemctl start crio.service kubeadm init
|
Install a netwokr plugin
for coredns can work 1
| kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
|
Taint
remove ( allow scheduing on the master for single-node setup)
1
| kubectl taint nodes --all node-role.kubernetes.io/control-plane-
|
Install Ingress
Controller(Nginx ingress)
1 2
| kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/cloud/deploy.yaml kubectl get pods -n ingress-nginx
|
- deamonset :: speaker
- development :: controller
1
| kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.14.9/config/manifests/metallb-native.yaml
|
Install docker - for
building contianer
1
| https://docs.docker.com/engine/install/debian/
|
Install helm
1 2 3 4 5
| curl https://baltocdn.com/helm/signing.asc | gpg --dearmor | sudo tee /usr/share/keyrings/helm.gpg > /dev/null sudo apt-get install apt-transport-https --yes echo deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/helm.gpg] https://baltocdn.com/helm/stable/debian/ all main | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list sudo apt-get update sudo apt-get install helm
|
Install cert-manager
1 2 3 4 5 6 7 8
| helm repo add jetstack https://charts.jetstack.io helm repo update kubectl create namespace cert-manager elm install cert-manager jetstack/cert-manager --namespace cert-manager --version v1.12.3 --set installCRDs=true
|
實用小技巧
helm Install
1 2 3
| helm install ingress-nginx ingress-nginx/ingress-nginx --set controller.service.type=LoadBalancer --set controller.service.loadBalancerIP=140.113.168.153
|
1
| helm install metallb metallb/metallb -n metallb-system --create-namespace
|
helm Update value
1 2 3 4
| controller: logLevel: info speaker: logLevel: info
|
and you can use
helm upgrade metallb metallb/metallb -n metallb-system -f ~/metallb-loglevel.yml
to update it
Error
Can't get ARP
1
| kubectl label nodes guosw-debian-k8s-blog node.kubernetes.io/exclude-from-external-load-balancers-
|
and restart metallb-speaker
metallb-controller 1
| k rollout restart <service> <service name>
|
設定流程大概就長這樣,接下來就是自己去設定
- development
- 要把
docker image push 掉docker hub 上
- service
- 把
hexo server的4000port
forward到80port
- 如果只有一個網頁服務的話可以直接用
externalIPs就可以結束了
- ingress + cert manager