离线安装k3s(Air Gap Install)

准备离线文件

https://github.com/k3s-io/k3s/releases下载以下文件:
* k3s-airgap-images-amd64.tar.zst
* k3s

https://rancher-mirror.rancher.cn/k3s/k3s-install.sh下载k3s-install.sh文件。

离线安装(Ubuntu 22.04)

  1. 将k3s-airgap-images-amd64.tar.zst文件上传到服务器的/var/lib/rancher/k3s/agent/images/目录下

    1
    2
    sudo mkdir -p /var/lib/rancher/k3s/agent/images/
    sudo cp k3s-airgap-images-amd64.tar.zst /var/lib/rancher/k3s/agent/images/
  2. 将k3s文件上传到服务器的/usr/local/bin/目录下

    1
    2
    sudo cp k3s /usr/local/bin/
    sudo chmod +x /usr/local/bin/k3s
  3. 将k3s-install.sh文件上传到服务器

  4. 执行安装脚本

    1
    2
    3
    4
    5
    chmod +x k3s-install.sh
    sudo INSTALL_K3S_SKIP_DOWNLOAD=true \
    INSTALL_K3S_EXEC='server --token=23f0fba79fc84fd5962279908c86d05e --cluster-init' \
    ./k3s-install.sh

挂载NAS

在阿里云控制台查看具体操作

helm安装(ubuntu 22.04)

1
2
3
cp /etc/rancher/k3s/k3s.yaml ~/.kube/config

sudo snap install helm --classic

使用Lens访问

https://k8slens.dev/下载Lens安装包,支持windows,需要通过XShell的隧道来打通网络。

使用Docker下载镜像再导入到k8s

Docker下载

1
docker save registry.k8s.io/kube-state-metrics/kube-state-metrics:v2.9.2 -o kube-state-metrics-v2.9.2.tar

Docker导入

1
docker image load -i kube-state-metrics-v2.9.2.tar

k3s导入

1
2
k3s ctr image import kube-state-metrics-v2.9.2.tar
k3s ctr image ls|grep kube-state-metrics

注意:如果镜像的下载策略(imagePullPolicy)是Always,则始终会重新下载镜像,所以要使用导入的镜像,需要将镜像下载策略改为IfNotPresent

kube-prometheus

参考:https://github.com/prometheus-operator/kube-prometheus

1
2
3
4
5
6
7
8
9
kubectl apply --server-side -f manifests/setup
kubectl wait \
--for condition=Established \
--all CustomResourceDefinition \
--namespace=monitoring
kubectl apply -f manifests/

kubectl port-forward pod/grafana-748964b847-vtnk8 3000 3000 -n monitoring
默认账号密码: admin/admin

安装Docker(Ubuntu)

1
sudo apt install docker.io

配置镜像加速(阿里云)

1
2
3
4
5
6
7
8
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://??????.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

rancher(弃用)

Rancher安装后默认开启了一个内置的k3s集群,但是无法增加自建的k8s集群?或许只用k3s才是最简单的方式?毕竟Rancher带来了更多的复杂性和不可控性。

持久化存储(longhorn)

1
2
wget https://raw.githubusercontent.com/longhorn/longhorn/v1.5.1/deploy/longhorn.yaml
kubectl apply -f longhorn.yaml

部署私有镜像仓库

1
2
3
4
5
6
docker run -d\
-p 5000:5000\
--restart unless-stopped\
--name registry\
-v /mnt/registry-data:/var/lib/registry\
registry:latest

标记镜像并推送到私有仓库:

1
2
docker tag registry:latest 127.0.0.1:5000/registry:v2.7.1
docker push 127.0.0.1:5000/registry:v2.7.1

用curl查看仓库中的镜像:

1
2
3
4
5
# 查看仓库中镜像
curl -X GET 127.0.0.1:5000/v2/_catalog

# 查看某个具体镜像的tag
curl -X GET 127.0.0.1:5000/v2/image_name/tags/list

如果出现异常可以加-v或–verbose参数以详细模式运行curl,方便排查

其他主机使用私有仓库镜像,则需要修改daemon.json文件,并使之生效:

1
2
3
4
5
6
7
8
9
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://your_id.mirror.aliyuncs.com"],
"insecure-registries": ["192.168.1.1:5000"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

TODO: 部署Docker私有镜像服务,使用阿里云NAS存储镜像,然后让k3s使用私有镜像仓库。
https://zhuanlan.zhihu.com/p/78543733
https://blog.csdn.net/kidom1412/article/details/108128859

自建容器镜像仓库虽然存在单点瓶颈,还是比从文件中手动加载要,毕竟可以由k8s自动处理,新加入的节点也可以自动拉取镜像。