Firxiao

记录些有用的东西

树莓派k3s

14 Dec 2021 » raspberry, k3s

很早就开始接触了k8s

各种安装方式都折腾了很久, 到头来也很少实际的去用.

最近重拾k8s, 使用k3s来些实际的应用.

  • 系统: Ubuntu 20.04 LTS
  • 硬件: 树莓派4b 2G版

准备工作

  1. 打开cgroup

    /boot/firmware/cmdline.txtconsole前面添加cgroup_enable=memory cgroup_memory=1 然后重启生效

  2. 安装docker

    这里我们使用docker做为后端.

    sudo apt update
    sudo apt install docker.io
    

安装k3s

k3s 的安装很简单, 一个命令就可以搞定

# 这里我们把脚本下载下来方便下次重新配置
curl -o k3s.sh https://get.k3s.io
sudo ./k3s.sh --docker --resolv-conf /var/run/systemd/resolve/resolv.conf

查看k3s状态

拉取image会需要点时间,等待片刻等所有podsready, 就可以了.

sudo kubectl get pods -A
NAMESPACE     NAME                                      READY   STATUS      RESTARTS   AGE
kube-system   coredns-7448499f4d-k2tst                  1/1     Running     0          22h
kube-system   metrics-server-86cbb8457f-2dztq           1/1     Running     0          22h
kube-system   helm-install-traefik-crd-ns8mj            0/1     Completed   0          22h
kube-system   helm-install-traefik-nldqp                0/1     Completed   2          22h
kube-system   traefik-6b84f7cbc-4bwcd                   1/1     Running     0          22h
kube-system   svclb-traefik-q97hs                       2/2     Running     0          22h
kube-system   local-path-provisioner-5ff76fc89d-fjcgz   1/1     Running     1          22h

安装配置Helm

curl -o helm-v3.7.2-linux-arm64.tar.gz https://get.helm.sh/helm-v3.7.2-linux-arm64.tar.gz
tar xvf helm-v3.7.2-linux-arm64.tar.gz
sudo cp linux-arm64/helm /usr/local/bin/
# 配置下helm认证
sudo cp /etc/rancher/k3s/k3s.yaml .kube/config
sudo chown $USER. .kube/config
# 查看已经安装的helm chart
helm ls -A
NAME       	NAMESPACE  	REVISION	UPDATED                                	STATUS  	CHART               	APP VERSION
traefik    	kube-system	1       	2021-12-13 13:50:48.900055461 +0000 UTC	deployed	traefik-9.18.201    	2.4.8
traefik-crd	kube-system	1       	2021-12-13 13:50:27.247206569 +0000 UTC	deployed	traefik-crd-9.18.201

安装Aliyun-ddns

花了点时间把之前做的aliyun-ddns打包成了helm chart.

helm repo add oncloudops https://helm.oncloudops.com/
tee config.yaml <<EOF
# config.yaml
# 阿里云 Access Key ID
access_key_id: "FFFFFFFFFF"
# 阿里云 Access Key Secret
access_key_secret: "FFFFFFFFFF"
# 阿里云 一级域名
rc_domain: "example.com"
# 解析记录
rc_rr_list: "foo,bar"
EOF

helm install my-aliyun-ddns oncloudops/aliyun-ddns  -f config.yaml
export POD_NAME=$(sudo kubectl get pods --namespace default -l "app.kubernetes.io/name=aliyun-ddns,app.kubernetes.io/instance=my-aliyun-ddns" -o jsonpath="{.items[0].metadata.name}")
# 手动更新DDNS
sudo kubectl -n default exec -t -i $POD_NAME -- /app/aliyun-ddns.py

已知问题

  • coredns有时会无法解析上游地址

    可以通过手动指定上游DNS地址来解决问题

    重启k3s服务配置会丢失,需要重新配置下

    sudo vim /var/lib/rancher/k3s/server/manifests/coredns.yaml
    # 第70行
        forward . 8.8.8.8
    
  • 如果你已经安装Nginx服务, k3s会劫持80和443端口到traefik

    可以通过下面的方式更改traefik的端口

    sudo kubectl -n kube-system edit svc traefik
    # 第32行
    port: 8080
    # 第37行
    port: 8443
    

参考:

  • https://k3s.io
  • https://helm.oncloudops.com