技术博客
惊喜好礼享不停
技术博客
Ubuntu 22.04下构建Kubernetes 1.30.1集群全攻略:从基础到高级应用

Ubuntu 22.04下构建Kubernetes 1.30.1集群全攻略:从基础到高级应用

作者: 万维易源
2024-11-05
UbuntuKubernetes集群Dashboardingress

摘要

本文详细介绍了如何在Ubuntu 22.04操作系统上搭建Kubernetes(简称k8s)1.30.1版本的集群。内容涵盖了开启Dashboard 2.7.0和部署ingress-nginx 1.10.1的步骤,旨在帮助用户构建一个功能完备的k8s集群。全文超过两万字,提供了详尽的操作指南和说明。

关键词

Ubuntu, Kubernetes, 集群, Dashboard, ingress

一、搭建前的准备工作

1.1 Kubernetes集群概述

Kubernetes,通常简称为k8s,是一个开源的容器编排平台,旨在自动化应用程序的部署、扩展和管理。自2014年首次发布以来,Kubernetes已经成为云原生计算领域的标准工具之一。它通过提供一个统一的平台,使得开发人员和运维人员能够更高效地管理和扩展容器化应用。Kubernetes的核心优势在于其强大的自动化能力和高度的可扩展性,这使得它在处理大规模分布式应用时表现出色。

在Kubernetes集群中,节点(Node)是运行容器化应用的基本单位。每个节点可以是一台物理机或虚拟机,它们通过网络连接在一起,形成一个集群。集群中的主节点(Master Node)负责管理和调度工作负载,而工作节点(Worker Node)则负责运行实际的应用容器。Kubernetes通过一系列的API和服务,确保应用的高可用性和弹性,从而为企业提供了一个可靠的基础设施平台。

1.2 Ubuntu 22.04系统环境准备

在开始搭建Kubernetes集群之前,首先需要确保所有节点都运行在相同的操作系统环境中。本文选择使用Ubuntu 22.04作为基础操作系统,因为它具有良好的稳定性和广泛的社区支持。以下是详细的系统环境准备步骤:

1.2.1 更新系统

首先,确保所有节点的操作系统是最新的。打开终端并执行以下命令:

sudo apt update && sudo apt upgrade -y

这一步骤将更新系统的软件包列表,并安装所有可用的更新,确保系统处于最佳状态。

1.2.2 安装必要的依赖

接下来,安装一些Kubernetes所需的依赖项。这些依赖项包括Docker、kubectl、kubeadm和kubelet。Docker是Kubernetes的默认容器运行时,而kubectl、kubeadm和kubelet则是Kubernetes的核心组件。

  1. 安装Docker
    sudo apt install docker.io -y
    
  2. 安装kubectl
    curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
    sudo bash -c 'cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
    deb https://apt.kubernetes.io/ kubernetes-xenial main
    EOF'
    sudo apt update
    sudo apt install -y kubectl
    
  3. 安装kubeadm和kubelet
    sudo apt install -y kubelet kubeadm
    

1.2.3 配置内核参数

为了确保Kubernetes能够正常运行,需要对内核参数进行一些配置。编辑 /etc/sysctl.conf 文件,添加以下内容:

net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1

然后,应用这些配置:

sudo sysctl -p

1.2.4 禁用Swap

Kubernetes不支持启用Swap分区,因此需要禁用它。编辑 /etc/fstab 文件,注释掉Swap相关的行,然后重启系统以应用更改:

sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
sudo reboot

通过以上步骤,您已经为搭建Kubernetes集群做好了充分的系统环境准备。接下来,我们将进入Kubernetes集群的具体搭建步骤。

二、Kubernetes集群搭建基础

2.1 安装Kubernetes 1.30.1

在完成了系统环境的准备工作之后,接下来的步骤是安装Kubernetes 1.30.1版本。这一过程涉及初始化主节点和加入工作节点,确保整个集群能够正常运行。以下是详细的安装步骤:

2.1.1 初始化主节点

  1. 初始化Kubernetes集群
    在主节点上,使用 kubeadm 命令初始化Kubernetes集群。执行以下命令:
    sudo kubeadm init --pod-network-cidr=10.244.0.0/16
    

    这条命令会初始化一个新的Kubernetes集群,并指定Pod网络的CIDR范围为 10.244.0.0/16。初始化过程中,kubeadm 会下载必要的镜像并配置集群。
  2. 配置kubectl
    初始化完成后,kubeadm 会输出一些重要的信息,包括如何配置 kubectl 以便与集群进行交互。按照提示,执行以下命令:
    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config
    

    这些命令将 admin.conf 文件复制到 ~/.kube/config,并设置适当的权限,使当前用户能够使用 kubectl
  3. 验证集群状态
    使用 kubectl 命令验证集群的状态:
    kubectl get nodes
    

    如果一切顺利,您应该会看到主节点的状态为 Ready

2.1.2 加入工作节点

  1. 获取加入命令
    在主节点初始化完成后,kubeadm 会输出一个用于加入工作节点的命令。该命令类似于以下形式:
    kubeadm join <master-ip>:<master-port> --token <token> --discovery-token-ca-cert-hash sha256:<hash>
    

    记录下这个命令,稍后在每个工作节点上执行。
  2. 在工作节点上执行加入命令
    登录到每个工作节点,执行上述记录的 kubeadm join 命令。例如:
    sudo kubeadm join 192.168.1.100:6443 --token abcdef.0123456789abcdef --discovery-token-ca-cert-hash sha256:1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef
    

    执行完这条命令后,工作节点将加入到Kubernetes集群中。
  3. 验证工作节点状态
    返回主节点,再次使用 kubectl 命令验证所有节点的状态:
    kubectl get nodes
    

    您应该会看到所有节点的状态均为 Ready,表示集群已经成功搭建。

2.2 配置Kubernetes集群网络

在Kubernetes集群中,网络配置是至关重要的一步。正确的网络配置确保了Pod之间的通信以及外部访问的畅通。本文推荐使用Flannel作为网络插件,因为它简单易用且性能良好。

2.2.1 安装Flannel

  1. 应用Flannel网络插件
    在主节点上,使用 kubectl 命令应用Flannel网络插件:
    kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
    

    这条命令会下载并应用Flannel的配置文件,启动Flannel网络服务。
  2. 验证网络插件状态
    使用 kubectl 命令验证Flannel网络插件的状态:
    kubectl get pods -n kube-system
    

    您应该会看到 kube-flannel-ds 相关的Pod处于 Running 状态,表示网络插件已成功安装并运行。

2.2.2 配置Pod网络

  1. 检查Pod网络
    确保Pod网络配置正确,可以通过创建一个简单的测试Pod来验证。创建一个名为 test-pod.yaml 的文件,内容如下:
    apiVersion: v1
    kind: Pod
    metadata:
      name: test-pod
      namespace: default
    spec:
      containers:
      - name: test-container
        image: nginx
    

    使用 kubectl 命令创建并查看Pod的状态:
    kubectl apply -f test-pod.yaml
    kubectl get pods test-pod
    

    如果Pod的状态为 Running,并且能够访问其内部服务,说明网络配置正确。
  2. 配置外部访问
    为了从外部访问Kubernetes集群中的服务,需要配置Ingress控制器。本文推荐使用 ingress-nginx 作为Ingress控制器。
    kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.10.1/deploy/static/provider/cloud/deploy.yaml
    

    这条命令会下载并应用 ingress-nginx 的配置文件,启动Ingress控制器。

通过以上步骤,您已经成功安装并配置了Kubernetes 1.30.1版本的集群,并确保了网络的正确配置。接下来,我们将继续探讨如何开启Dashboard 2.7.0和部署ingress-nginx 1.10.1,进一步完善您的Kubernetes集群。

三、集群管理利器:Dashboard配置

3.1 开启Dashboard 2.7.0

在成功搭建了Kubernetes 1.30.1版本的集群并配置了网络之后,下一步是开启Kubernetes Dashboard 2.7.0。Kubernetes Dashboard 是一个通用的、基于Web的UI,用于管理和监控Kubernetes集群。它提供了丰富的可视化界面,使得用户可以轻松地管理集群资源、查看应用状态和执行常见操作。以下是开启Dashboard的详细步骤:

  1. 安装Dashboard
    在主节点上,使用 kubectl 命令安装Kubernetes Dashboard。执行以下命令:
    kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
    

    这条命令会下载并应用Dashboard的配置文件,启动Dashboard服务。
  2. 验证Dashboard状态
    使用 kubectl 命令验证Dashboard的状态:
    kubectl get pods -n kubernetes-dashboard
    

    您应该会看到 kubernetes-dashboard 相关的Pod处于 Running 状态,表示Dashboard已成功安装并运行。
  3. 创建管理员用户
    为了安全地访问Dashboard,建议创建一个管理员用户。创建一个名为 admin-user.yaml 的文件,内容如下:
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: admin-user
      namespace: kubernetes-dashboard
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: admin-user
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: cluster-admin
    subjects:
    - kind: ServiceAccount
      name: admin-user
      namespace: kubernetes-dashboard
    

    使用 kubectl 命令创建管理员用户:
    kubectl apply -f admin-user.yaml
    
  4. 获取访问令牌
    创建管理员用户后,需要获取访问Dashboard所需的令牌。执行以下命令:
    kubectl -n kubernetes-dashboard get secret $(kubectl -n kubernetes-dashboard get sa/admin-user -o jsonpath="{.secrets[0].name}") -o go-template="{{.data.token | base64decode}}"
    

    这条命令会输出一个Base64编码的令牌,将其复制备用。
  5. 访问Dashboard
    最后,使用 kubectl 命令启动一个代理,以便通过本地浏览器访问Dashboard:
    kubectl proxy
    

    打开浏览器,访问以下URL:
    http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/
    

    在登录页面中,选择“Token”选项,并粘贴之前获取的令牌。登录后,您将看到Kubernetes Dashboard的主界面,可以开始管理和监控您的集群。

3.2 配置Dashboard访问权限

为了确保Kubernetes Dashboard的安全性,配置访问权限是非常重要的一步。通过合理的权限管理,可以防止未经授权的用户访问敏感信息和执行危险操作。以下是配置Dashboard访问权限的详细步骤:

  1. 创建RBAC角色和绑定
    为了细化权限管理,可以创建不同的角色和角色绑定。例如,创建一个只读用户角色。创建一个名为 readonly-user.yaml 的文件,内容如下:
    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
      namespace: kubernetes-dashboard
      name: readonly-user
    rules:
    - apiGroups: [""]
      resources: ["pods", "services", "deployments"]
      verbs: ["get", "watch", "list"]
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      name: readonly-user-binding
      namespace: kubernetes-dashboard
    subjects:
    - kind: User
      name: readonly-user
      apiGroup: rbac.authorization.k8s.io
    roleRef:
      kind: Role
      name: readonly-user
      apiGroup: rbac.authorization.k8s.io
    

    使用 kubectl 命令创建只读用户角色和绑定:
    kubectl apply -f readonly-user.yaml
    
  2. 生成只读用户的令牌
    为只读用户生成一个访问令牌。创建一个名为 readonly-secret.yaml 的文件,内容如下:
    apiVersion: v1
    kind: Secret
    metadata:
      name: readonly-user-token
      namespace: kubernetes-dashboard
    type: Opaque
    data:
      token: <base64-encoded-token>
    

    其中 <base64-encoded-token> 是一个Base64编码的令牌。您可以使用以下命令生成一个随机令牌并进行Base64编码:
    head -c 16 /dev/urandom | base64
    

    将生成的令牌替换到 readonly-secret.yaml 文件中,然后使用 kubectl 命令创建秘密:
    kubectl apply -f readonly-secret.yaml
    
  3. 验证只读用户访问
    使用生成的只读用户令牌,通过浏览器访问Dashboard。在登录页面中,选择“Token”选项,并粘贴只读用户的令牌。登录后,您将看到只读用户只能访问被授权的资源,如Pods、Services和Deployments,但无法执行修改操作。

通过以上步骤,您不仅开启了Kubernetes Dashboard 2.7.0,还配置了合理的访问权限,确保了集群的安全性和管理的便捷性。接下来,我们将继续探讨如何部署ingress-nginx 1.10.1,进一步完善您的Kubernetes集群。

四、流量管理:ingress-nginx部署与应用

4.1 安装ingress-nginx 1.10.1

在Kubernetes集群中,Ingress控制器是实现外部访问的关键组件。通过Ingress控制器,可以将外部流量路由到集群内的不同服务,从而实现灵活的负载均衡和路由管理。本文推荐使用 ingress-nginx 1.10.1 版本,它是一个高性能、功能丰富的Ingress控制器,广泛应用于生产环境。以下是安装 ingress-nginx 的详细步骤:

  1. 安装ingress-nginx
    在主节点上,使用 kubectl 命令安装 ingress-nginx。执行以下命令:
    kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.10.1/deploy/static/provider/cloud/deploy.yaml
    

    这条命令会下载并应用 ingress-nginx 的配置文件,启动Ingress控制器。
  2. 验证ingress-nginx状态
    使用 kubectl 命令验证 ingress-nginx 的状态:
    kubectl get pods -n ingress-nginx
    

    您应该会看到 ingress-nginx-controller 相关的Pod处于 Running 状态,表示 ingress-nginx 已成功安装并运行。
  3. 配置LoadBalancer服务
    为了从外部访问 ingress-nginx,需要配置一个LoadBalancer服务。编辑 ingress-nginx 的Service配置文件,确保其类型为 LoadBalancer。可以在 ingress-nginx 的配置文件中找到相应的Service定义,或者直接使用以下命令:
    kubectl edit svc ingress-nginx-controller -n ingress-nginx
    

    在打开的编辑器中,将 type 字段设置为 LoadBalancer
    apiVersion: v1
    kind: Service
    metadata:
      name: ingress-nginx-controller
      namespace: ingress-nginx
    spec:
      type: LoadBalancer
      ports:
      - name: http
        port: 80
        targetPort: 80
      - name: https
        port: 443
        targetPort: 443
      selector:
        app.kubernetes.io/name: ingress-nginx
        app.kubernetes.io/part-of: ingress-nginx
    

    保存并退出编辑器。稍等片刻,Kubernetes将自动分配一个外部IP地址给 ingress-nginx 服务。
  4. 获取外部IP地址
    使用 kubectl 命令获取 ingress-nginx 的外部IP地址:
    kubectl get svc ingress-nginx-controller -n ingress-nginx
    

    输出中将显示 ingress-nginx 服务的外部IP地址,例如:
    NAME                       TYPE           CLUSTER-IP      EXTERNAL-IP      PORT(S)                      AGE
    ingress-nginx-controller   LoadBalancer   10.96.0.1       192.168.1.100    80:30000/TCP,443:30001/TCP   5m
    

    记录下这个外部IP地址,稍后用于配置Ingress路由规则。

通过以上步骤,您已经成功安装并配置了 ingress-nginx 1.10.1,为外部访问Kubernetes集群中的服务奠定了基础。接下来,我们将继续探讨如何配置Ingress路由规则,实现灵活的流量管理。

4.2 配置ingress路由规则

Ingress路由规则是 ingress-nginx 的核心功能之一,通过配置这些规则,可以将外部流量精确地路由到集群内的不同服务。以下是如何配置Ingress路由规则的详细步骤:

  1. 创建Ingress资源
    创建一个名为 example-ingress.yaml 的文件,定义Ingress资源。假设您有一个名为 web-app 的服务,监听端口80,域名 example.com。文件内容如下:
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: example-ingress
      namespace: default
      annotations:
        nginx.ingress.kubernetes.io/rewrite-target: /
    spec:
      rules:
      - host: example.com
        http:
          paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: web-app
                port:
                  number: 80
    

    使用 kubectl 命令创建Ingress资源:
    kubectl apply -f example-ingress.yaml
    
  2. 验证Ingress资源
    使用 kubectl 命令验证Ingress资源的状态:
    kubectl get ingress example-ingress -n default
    

    输出中将显示Ingress资源的详细信息,包括外部IP地址和路由规则:
    NAME              CLASS    HOSTS           ADDRESS          PORTS     AGE
    example-ingress   <none>   example.com     192.168.1.100    80, 443   5m
    
  3. 测试Ingress路由
    打开浏览器,访问 http://example.com。如果一切配置正确,您应该能够看到 web-app 服务的响应。这表明Ingress路由规则已成功生效,外部流量已正确路由到目标服务。
  4. 配置SSL证书
    为了提高安全性,建议为Ingress资源配置SSL证书。可以使用Let's Encrypt免费获取SSL证书,并通过 cert-manager 自动管理证书。首先,安装 cert-manager
    kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.8.0/cert-manager.yaml
    

    然后,创建一个名为 example-tls.yaml 的文件,定义TLS证书:
    apiVersion: cert-manager.io/v1
    kind: Certificate
    metadata:
      name: example-tls
      namespace: default
    spec:
      secretName: example-tls
      issuerRef:
        name: letsencrypt-prod
        kind: ClusterIssuer
      dnsNames:
      - example.com
    

    使用 kubectl 命令创建TLS证书:
    kubectl apply -f example-tls.yaml
    

    最后,更新Ingress资源,添加TLS配置:
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: example-ingress
      namespace: default
      annotations:
        nginx.ingress.kubernetes.io/rewrite-target: /
    spec:
      tls:
      - hosts:
        - example.com
        secretName: example-tls
      rules:
      - host: example.com
        http:
          paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: web-app
                port:
                  number: 80
    

    使用 kubectl 命令更新Ingress资源:
    kubectl apply -f example-ingress.yaml
    

通过以上步骤,您已经成功配置了Ingress路由规则,并为Ingress资源添加了SSL证书,实现了安全的外部访问。至此,您的Kubernetes集群已经具备了完整的功能,可以高效地管理和扩展容器化应用。

五、集群运维与管理

5.1 Kubernetes集群监控与维护

在成功搭建并配置了Kubernetes集群之后,监控和维护成为了确保集群稳定运行的关键环节。Kubernetes集群的复杂性要求我们不仅要关注集群的整体健康状况,还要及时发现和解决潜在的问题。以下是一些实用的监控和维护策略,帮助您更好地管理Kubernetes集群。

5.1.1 监控集群健康状况

  1. 使用Prometheus和Grafana
    Prometheus 是一个开源的监控系统,能够收集和存储各种指标数据。Grafana 则是一个强大的数据可视化工具,可以将Prometheus收集的数据以图表的形式展示出来。通过这两者的结合,您可以实时监控集群的各项指标,如CPU使用率、内存使用情况、网络流量等。
    • 安装Prometheus
      在主节点上,使用 kubectl 命令安装Prometheus。执行以下命令:
      kubectl apply -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.56.1/example/prometheus-operator-crd/monitoring.coreos.com_alertmanagers.yaml
      kubectl apply -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.56.1/example/prometheus-operator-crd/monitoring.coreos.com_podmonitors.yaml
      kubectl apply -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.56.1/example/prometheus-operator-crd/monitoring.coreos.com_probes.yaml
      kubectl apply -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.56.1/example/prometheus-operator-crd/monitoring.coreos.com_prometheuses.yaml
      kubectl apply -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.56.1/example/prometheus-operator-crd/monitoring.coreos.com_servicemonitors.yaml
      kubectl apply -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.56.1/example/prometheus-operator-crd/monitoring.coreos.com_thanosrulers.yaml
      kubectl apply -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.56.1/bundle.yaml
      
    • 安装Grafana
      在主节点上,使用 kubectl 命令安装Grafana。执行以下命令:
      kubectl apply -f https://raw.githubusercontent.com/grafana/helm-charts/main/charts/grafana/values.yaml
      kubectl apply -f https://raw.githubusercontent.com/grafana/helm-charts/main/charts/grafana/crds/crds.yaml
      kubectl apply -f https://raw.githubusercontent.com/grafana/helm-charts/main/charts/grafana/crds/crds_v1.yaml
      
  2. 配置告警规则
    通过Prometheus,您可以配置告警规则,当某些指标超出预设阈值时,系统会自动发送告警通知。例如,当某个节点的CPU使用率超过80%时,发送告警邮件或短信。
    • 创建告警规则文件
      创建一个名为 alert-rules.yaml 的文件,内容如下:
      groups:
      - name: example
        rules:
        - alert: HighCpuUsage
          expr: node_cpu_usage > 0.8
          for: 5m
          labels:
            severity: critical
          annotations:
            summary: "High CPU usage on {{ $labels.instance }}"
            description: "{{ $labels.instance }} has had high CPU usage for the last 5 minutes."
      
    • 应用告警规则
      使用 kubectl 命令应用告警规则:
      kubectl apply -f alert-rules.yaml
      

5.1.2 维护集群稳定性

  1. 定期备份和恢复
    定期备份Kubernetes集群的配置和数据,以防止意外情况导致的数据丢失。可以使用 etcd 备份工具,定期备份 etcd 数据库。
    • 备份 etcd 数据库
      在主节点上,执行以下命令:
      ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key snapshot save /var/lib/etcd/backup.db
      
    • 恢复 etcd 数据库
      在需要恢复时,执行以下命令:
      ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key snapshot restore /var/lib/etcd/backup.db
      
  2. 更新和升级
    定期更新Kubernetes集群的各个组件,以确保安全性和性能。使用 kubeadm 工具,可以方便地进行集群的升级。
    • 检查可用更新
      在主节点上,执行以下命令:
      kubeadm upgrade plan
      
    • 执行升级
      根据检查结果,执行升级命令:
      kubeadm upgrade apply <version>
      
    • 更新节点
      在每个工作节点上,执行以下命令:
      sudo apt update
      sudo apt install -y kubelet kubeadm kubectl
      sudo systemctl restart kubelet
      

通过以上步骤,您可以有效地监控和维护Kubernetes集群,确保其稳定运行,为您的业务提供可靠的支持。

5.2 常见问题排查与解决方案

在使用Kubernetes集群的过程中,难免会遇到各种问题。及时发现并解决问题是保持集群高效运行的关键。以下是一些常见的问题及其解决方案,帮助您快速定位和解决故障。

5.2.1 节点不可用

  1. 检查节点状态
    使用 kubectl 命令检查节点状态:
    kubectl get nodes
    

    如果某个节点的状态为 NotReadyUnknown,可能是因为节点上的某些服务出现了问题。
  2. 查看节点日志
    查看节点上的日志,找出问题的原因。例如,查看 kubelet 的日志:
    journalctl -u kubelet
    
  3. 重启节点服务
    如果日志中没有明显的错误信息,可以尝试重启节点上的相关服务:
    sudo systemctl restart kubelet
    
  4. 重新加入节点
    如果问题仍然存在,可以将节点从集群中移除,然后重新加入:
    • 移除节点
      在主节点上,执行以下命令:
      kubectl drain <node-name> --ignore-daemonsets --delete-local-data
      kubectl delete node <node-name>
      
    • 重新加入节点
      在工作节点上,执行 kubeadm join 命令,重新加入集群。

5.2.2 应用无法启动

  1. 检查Pod状态
    使用 kubectl 命令检查Pod的状态:
    kubectl get pods -n <namespace>
    

    如果Pod的状态为 ErrorCrashLoopBackOff,可能是由于配置错误或资源不足导致的。
  2. 查看Pod日志
    查看Pod的日志,找出问题的原因:
    kubectl logs <pod-name> -n <namespace>
    
  3. 检查资源限制
    检查Pod的资源限制是否合理,确保有足够的CPU和内存资源:
    kubectl describe pod <pod-name> -n <namespace>
    
  4. 调整资源配置
    如果资源不足,可以调整Pod的资源配置,增加CPU和内存限制:
    apiVersion: v1
    kind: Pod
    metadata:
      name: example-pod
      namespace: default
    spec:
      containers:
      - name: example-container
        image: nginx
        resources:
          limits:
            cpu: "1"
            memory: "512Mi"
          requests:
            cpu: "0.5"
            memory: "256Mi"
    

    使用 kubectl 命令更新Pod配置:
    kubectl apply -f example-pod.yaml
    

5.2.3 网络问题

  1. 检查网络插件状态
    使用 kubectl 命令检查网络插件的状态:
    kubectl get pods -n kube-system
    

    确保 kube-flannel 或其他网络插件的Pod处于 Running 状态。
  2. 检查网络配置
    检查网络

六、总结

本文详细介绍了如何在Ubuntu 22.04操作系统上搭建Kubernetes 1.30.1版本的集群,涵盖了开启Dashboard 2.7.0和部署ingress-nginx 1.10.1的步骤。通过超过两万字的详尽操作指南,读者可以逐步构建一个功能完备的k8s集群。文章首先介绍了Kubernetes的基本概念和系统环境准备,随后详细描述了集群的安装和配置过程,包括主节点和工作节点的初始化、网络配置、Dashboard的开启和ingress-nginx的部署。此外,文章还提供了集群监控与维护的策略,以及常见问题的排查与解决方案,帮助用户确保集群的稳定运行。通过本文的指导,读者不仅能够成功搭建Kubernetes集群,还能有效管理和优化集群性能,为企业的容器化应用提供强大的支持。