Kubernetes安装(Sealos)

1. 在联网服务器拉取镜像并打包

  1. 访问Sealos源码下载二进制包,复制到联网服务器。
  2. 使用tar xvf sealos_5.1.1_linux_amd64.tar.gz sealos解压,使用mv sealos /usr/local/bin/放到全局工具目录,使用sealos version验证生效。
  3. 访问Registry Explore网站查询镜像仓库中镜像的最新版本。
  4. 确定registry.cn-shanghai.aliyuncs.com/labring/kubernetesregistry.cn-shanghai.aliyuncs.com/labring/helmregistry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controllerregistry.cn-shanghai.aliyuncs.com/labring/cilium的版本。
  5. 使用如下命令拉取远程镜像到本地(使用sealos images查看本地镜像):
    1
    2
    3
    sealos pull registry.cn-shanghai.aliyuncs.com/labring/kubernetes:v1.31.11
    sealos pull registry.cn-shanghai.aliyuncs.com/labring/helm:3.19.2
    sealos pull registry.cn-shanghai.aliyuncs.com/labring/cilium:v1.14.19
    
  6. 使用如下命令将本地镜像打包(仅归档不压缩):
    1
    2
    3
    sealos save -o kubernetes-v1.31.11.tar registry.cn-shanghai.aliyuncs.com/labring/kubernetes:v1.31.11
    sealos save -o helm-v1.19.2.tar registry.cn-shanghai.aliyuncs.com/labring/helm:v3.19.2
    sealos save -o cilium-v1.14.19.tar registry.cn-shanghai.aliyuncs.com/labring/cilium:v1.14.19
    
  7. 将镜像包复制到离线服务器(master节点),所有离线服务器使用相同密码。

2. 在离线服务器装载镜像并安装

  1. 在离线服务器(master节点)部署Sealos
  2. 使用如下命令将镜像包装载为本地镜像(使用sealos images查看本地镜像):
    1
    2
    3
    sealos load -i kubernetes-v1.31.11.tar
    sealos load -i helm-v1.19.2.tar
    sealos load -i cilium-v1.14.19.tar
    
  3. 使用sealos run registry.cn-shanghai.aliyuncs.com/labring/kubernetes:v1.31.11 registry.cn-shanghai.aliyuncs.com/labring/helm:v3.19.2 registry.cn-shanghai.aliyuncs.com/labring/cilium:v1.14.19 --masters 10.10.10.20 --nodes 10.10.10.21,10.10.10.22 -p L+ah204313805安装Kubernetes
  4. 安装完成后使用kubectl get node -o wide查看节点状态,使用kubectl get pod -A -o wide查看容器组状态(如果coredns没启动,有可能是/etc/resolv.conf为空导致coredns获取不到上游DNS信息)。
  5. 使用cat .kube/config获取集群信息(如果server后边的信息不对需要先修改),在图形化界面导入即可管理集群。

3. 安装IngressNginxController

  1. 访问ingress-nginx-4.14.3.tgz源码下载二进制包,复制到离线服务器。
  2. docker.1ms.run/dyrnq/kube-webhook-certgen:v1.6.7docker.1ms.run/dyrnq/ingress-nginx-controller:v1.14.3推送到Harbor仓库。
  3. 使用tar -zxvf ingress-nginx-4.14.3.tgz解压,使用vi ingress-nginx/values.yamlregistry:后边换成10.10.10.12
  4. 使用helm install ingress-nginx ingress-nginx --namespace ingress-nginx --create-namespace安装ingress-nginx-controller

4. 解决证书过期问题

使用kubeadm certs check-expiration命令查看证书过期时间,会发现super-admin.conf的有限期只有一年,到期后可以使用如下脚本自动续期:
vi /usr/local/bin/renew-k8s-certs.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/bin/bash
LOG_FILE="/var/log/k8s-cert-renew.log"
DATE=$(date '+%Y-%m-%d %H:%M:%S')

echo "[$DATE] 开始检查并续期证书..." >> $LOG_FILE
kubeadm certs renew all >> $LOG_FILE 2>&1

for component in kube-apiserver kube-controller-manager kube-scheduler etcd; do
  if [ -f "/etc/kubernetes/manifests/$component.yaml" ]; then
    mv /etc/kubernetes/manifests/$component.yaml /tmp/
    sleep 20
    mv /tmp/$component.yaml /etc/kubernetes/manifests/
  fi
done

systemctl restart kubelet
cp /etc/kubernetes/admin.conf /root/.kube/config
echo "[$DATE] 证书续期完成" >> $LOG_FILE

chmod +x /usr/local/bin/renew-k8s-certs.sh
crontab -e

1
0 3 1 */2 * /usr/local/bin/renew-k8s-certs.sh

5. 创建容器组

  1. 创建命名空间loonzhkubectl create namespace loonzh
  2. 启动Pod(离线服务器需要提前加载镜像包):kubectl run nginx -n loonzh --image=docker.1ms.run/nginx:1.29.6
  3. 查看Pod信息(IP字段是容器的集群地址,可以用来访问Nginx欢迎页):kubectl describe pod nginx -n lonnzh

    6. 创建部署(属于Workload)

    kubectl apply -f nginx-deployment.yaml
    ``` apiVersion: apps/v1 kind: Deployment metadata: namespace: loonzh name: nginx-deployment spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers:

    • name: nginx-container image: docker.1ms.run/nginx:1.29.6 ports:
      • containerPort: 80
        1
        2
        #### 7. 创建服务(NodePort模式)
        `kubectl apply -f nginx-service.yaml`  
        

        apiVersion: v1 kind: Service metadata: namespace: loonzh name: nginx-service spec: selector: app: nginx ports:

        • port: 80 targetPort: 80 nodePort: 30080 type: NodePort
          1
          2
          #### 8. 创建服务(ClusterIP模式和LoadBalancer模式)
          `kubectl apply -f nginx-service.yaml`  
          

          apiVersion: v1 kind: Service metadata: namespace: loonzh name: nginx-service spec: selector: app: nginx ports:

        • port: 10080 targetPort: 80 type: ClusterIP
          1
          2
          #### 9. 创建路由(LoadBalancer模式才需要创建Ingress,需要域名)
          `kubectl apply -f nginx-ingress.yaml`  
          

          apiVersion: networking.k8s.io/v1 kind: Ingress metadata: namespace: loonzh name: nginx-ingress spec: ingressClassName: ingress rules:

        • host: nginx.loonzh.cn http: paths:
    • path: /nginx pathType: Prefix backend: service: name: nginx-service port: number: 10080 ```

      10. 创建存储类()

      11. 创建有状态副本集

      11. 创建有状态副本集