0%

k8s setup(1)

因為之前一直用不習慣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

永久

  1. In /etc/fstab
  • remove swap
  1. enable br_netfilter at boot
  • echo br_netfilter | sudo tee /etc/modules-load.d/br_netfilter.conf
  1. 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

Install metallb Controller

  • 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 server4000port forward到80port
    • 如果只有一個網頁服務的話可以直接用externalIPs就可以結束了
  • ingress + cert manager