Alexu
发布于 2024-12-13 / 6 阅读
0
0

EKS集群部署

创建集群:

eksctl create cluster --name my-cluster --region us-west-2 --nodes 3 --node-type t3.medium

上述命令会在 us-west-2 区域创建一个名为 my-cluster 的 EKS 集群,并启动 3 个 t3.medium 类型的节点。

  • --nodes:指定节点的数量。

  • --node-type:指定 EC2 实例类型。

创建集群时,eksctl 会自动设置 kubectl 配置文件,使你可以通过 kubectl 管理集群。

配置 kubectl

创建集群之后,eksctl 会自动为你配置 kubectl,你可以通过以下命令验证配置是否成功:

bash
kubectl get nodes

这会列出当前集群中的节点信息,确保 EKS 集群已成功创建。

Helm

Helm 是 Kubernetes 的包管理工具,类似于 Linux 的 aptyum。它可以帮助你管理 Kubernetes 应用的安装和升级。

  1. 安装 Helm

    1. 对于 Linux:

    2. bash curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash

  2. 验证 Helm 安装: 使用以下命令验证 Helm 是否安装成功:

bash
helm version
  1. 配置 Helm 使用 Kubernetes 集群

  2. 初始化 Helm: 从 Helm 3 版本开始,Helm 不再需要 Tiller,因此无需执行任何初始化步骤。只需要确保 kubectl 已正确配置即可。

  3. 添加 Helm 仓库: 例如,添加官方的 Helm 仓库:

bash
helm repo add stable https://charts.helm.sh/stable
helm repo update

部署应用(示例:部署 Nginx)

你可以使用 Helm 部署应用程序(例如:Nginx)到 Kubernetes 集群中。

  1. 安装 Nginx: 使用 Helm 安装 Nginx:

bash
helm install my-nginx stable/nginx-ingress
  1. 查看部署的资源: 使用 kubectl 查看 Nginx 的部署和服务:

kubectl get all

配置 Helm 与 kubectl 集群连接

通常情况下,kubectl 已经为 EKS 集群配置好了访问权限。你只需要确保 Helm 使用的上下文与 kubectl 相同。

你可以通过以下命令检查当前 kubectl 上下文:

bash
kubectl config current-context

确保 Helm 使用的上下文与你的 EKS 集群上下文相同,通常 Helm 会自动继承 kubectl 配置。

升级与卸载 Helm 应用

  • 升级应用

bash
helm upgrade my-nginx stable/nginx-ingress
  • 卸载应用

helm uninstall my-nginx

集群管理

kubectl 是 Kubernetes 的命令行工具,广泛用于管理 Kubernetes 集群。它提供了很多命令来执行常见操作,下面是一些常用的 kubectl 操作和命令:

  1. 集群信息与节点操作

  • 查看集群信息

bash
kubectl cluster-info
  • 查看当前集群的基本信息。

  • 查看当前节点信息

bash
kubectl get nodes
  • 列出集群中的所有节点。

  • 查看节点详细信息

bash
kubectl describe node <node-name>
  • 显示指定节点的详细信息。

  1. 命名空间操作

  • 查看当前命名空间

bash
kubectl config view --minify | grep namespace:
  • 查看当前 kubectl 使用的命名空间。

  • 列出所有命名空间

bash
kubectl get namespaces
  • 切换命名空间

bash
kubectl config set-context --current --namespace=<namespace>
  1. Pod 操作

  • 列出所有 Pods

bash
kubectl get pods
  • 查看所有 Pods 的状态。

  • 列出指定命名空间中的 Pods

bash
kubectl get pods -n <namespace>
  • 查看某个 Pod 的详细信息

bash
kubectl describe pod <pod-name>
  • 查看 Pod 日志

bash
kubectl logs <pod-name>
  • 查看指定 Pod 的日志。

  • 查看 Pod 中容器的日志(如果 Pod 中有多个容器):

bash
kubectl logs <pod-name> -c <container-name>
  • 进入 Pod 内部

bash
kubectl exec -it <pod-name> -- /bin/bash
  • 在 Pod 内部执行命令。

  • 删除 Pod

bash
kubectl delete pod <pod-name>
  1. Deployment 和 ReplicaSet 操作

  • 列出所有 Deployments

bash
kubectl get deployments
  • 查看 Deployment 详情

bash
kubectl describe deployment <deployment-name>
  • 创建 Deployment

bash
kubectl create deployment <deployment-name> --image=<image-name>
  • 更新 Deployment

bash
kubectl set image deployment/<deployment-name> <container-name>=<new-image>
  • 滚动更新 Deployment

bash
kubectl rollout restart deployment/<deployment-name>
  • 查看 Deployment 的滚动更新状态

bash
kubectl rollout status deployment/<deployment-name>
  • 删除 Deployment

bash
kubectl delete deployment <deployment-name>
  1. Service 操作

  • 列出所有 Services

bash
kubectl get services
  • 查看某个 Service 的详情

bash
kubectl describe service <service-name>
  • 暴露 Deployment 创建 Service

bash
kubectl expose deployment <deployment-name> --type=LoadBalancer --name=<service-name>
  • 删除 Service

bash
kubectl delete service <service-name>
  1. ConfigMap 和 Secret 操作

  • 列出所有 ConfigMaps

bash
kubectl get configmaps
  • 查看 ConfigMap 的内容

bash
kubectl describe configmap <configmap-name>
  • 列出所有 Secrets

bash
kubectl get secrets
  • 查看 Secret 的内容

bash
kubectl describe secret <secret-name>
  1. PVC 和 PV 操作(存储)

  • 查看 PersistentVolumeClaim

bash
kubectl get pvc
  • 查看 PersistentVolume

bash
kubectl get pv
  • 创建 PersistentVolumeClaim

bash
kubectl apply -f pvc.yaml
  1. Configurations 和资源操作

  • 应用 Kubernetes 配置文件(如:部署、服务等):

bash
kubectl apply -f <file>.yaml
  • 查看所有资源(pods、deployments、services 等):

bash
kubectl get all
  • 查看某个资源的详细信息

bash
kubectl describe <resource-type> <resource-name>
  • 删除资源

bash
kubectl delete -f <file>.yaml
  • 或者

bash
kubectl delete <resource-type> <resource-name>
  1. 访问和调试

  • 端口转发到本地

bash
kubectl port-forward pod/<pod-name> <local-port>:<pod-port>
  • 调试应用的事件

bash
kubectl get events
  1. 其他常用命令

  • 查看集群中的所有资源类型

bash
kubectl api-resources
  • 查看资源的 YAML 配置

bash
kubectl get <resource-type> <resource-name> -o yaml
  • 创建资源(根据指定的配置文件创建):

bash
kubectl create -f <file>.yaml
  • 查看 Kubernetes 资源的历史版本

bash
kubectl rollout history deployment/<deployment-name>

集群资源

在 Kubernetes 集群中,资源指的是管理和运行容器化应用所需的各种对象。每种资源都有不同的用途和作用,可以帮助你定义、管理和操作集群中的应用和服务。以下是 Kubernetes 集群中的常见资源类型:

1. Pod

  • Pod 是 Kubernetes 中的最小部署单元,通常一个 Pod 包含一个或多个容器。

  • 容器在同一个 Pod 中共享网络和存储,可以通过同一 IP 和端口进行通信。

  • 通常用来运行单个应用实例,或是多个应用容器的组合。

2. Deployment

  • Deployment 是用于管理 Pod 的资源,通常用于定义和管理应用的副本数、更新策略等。

  • 它确保在集群中始终运行指定数量的 Pod 副本。

  • 可以轻松进行滚动更新,确保应用在更新时不间断服务。

3. ReplicaSet

  • ReplicaSet 是 Deployment 内部使用的对象,用于确保特定数量的 Pod 副本在集群中运行。

  • ReplicaSet 会自动创建新的 Pod 并删除失效或不需要的 Pod。

4. StatefulSet

  • StatefulSet 用于管理有状态应用(例如数据库、缓存等),它保证每个 Pod 都有唯一的、持久的标识符。

  • 它还会为每个 Pod 提供持久化存储。

5. DaemonSet

  • DaemonSet 用于确保在集群中的每个节点上运行一个 Pod 副本,通常用于节点级别的服务(如日志收集、监控等)。

  • 当新节点加入集群时,DaemonSet 会自动在新节点上创建一个 Pod。

6. Job

  • Job 用于管理一次性任务或批处理任务,确保任务成功运行。

  • 如果 Job 中的 Pod 失败,Kubernetes 会自动重启 Pod 直到任务完成。

7. CronJob

  • CronJob 用于定期或周期性地执行任务,类似于 Linux 中的 cron 命令。

  • 它可以设置定时任务,如每天、每周执行某个任务。

8. Service

  • Service 是一种抽象,它定义了一个访问指定 Pod 的方式,通常用于负载均衡和服务发现。

  • 常见的 Service 类型包括:ClusterIP(集群内部访问)、NodePort(通过节点 IP 和端口访问)、LoadBalancer(外部负载均衡器)等。

9. Ingress

  • Ingress 是一个 HTTP 和 HTTPS 路由规则,用于将外部请求引导到 Kubernetes 服务。

  • 它通常配合 Ingress Controller 使用,允许集群内部服务能够通过 HTTP(S) 路由进行访问。

10. ConfigMap

  • ConfigMap 用于存储非敏感的配置信息,如配置文件、环境变量等。

  • 它能够将配置与容器镜像分离,便于应用在不同环境中的配置管理。

11. Secret

  • Secret 用于存储敏感数据,如密码、API 密钥、证书等。

  • 它与 ConfigMap 类似,但提供了加密存储和更严格的访问控制。

12. PersistentVolume (PV)

  • PersistentVolume 是集群中的存储资源,它与底层的存储系统(如本地磁盘、NFS、云存储等)相对应。

  • PV 是集群管理员创建的资源,用户可以通过 PersistentVolumeClaim (PVC) 请求和使用存储。

13. PersistentVolumeClaim (PVC)

  • PersistentVolumeClaim 是用户对存储资源的请求,PVC 会根据 StorageClass 和资源需求向集群申请 PV。

  • 它是 Pod 挂载持久存储的方式,保证数据的持久化存储。

14. Namespace

  • Namespace 用于将集群中的资源进行分隔和隔离,方便进行资源管理和权限控制。

  • 它适用于多租户环境,可以让不同的团队或项目在同一集群中隔离开来。

15. ResourceQuota

  • ResourceQuota 用于限制一个 Namespace 中可使用的资源(如 CPU、内存、Pod 数量等)。

  • 它帮助防止某个团队或项目过度消耗集群资源。

16. LimitRange

  • LimitRange 是一种限制资源使用范围的机制,可以为 Pod 和容器设置默认的资源请求和限制(如 CPU 和内存),确保资源不会被过度使用。

17. HorizontalPodAutoscaler (HPA)

  • HPA 用于根据负载(如 CPU 或内存使用率)自动调整 Pod 副本的数量。

  • 它能够动态扩展或缩减 Pod 副本,以应对不同的工作负载需求。

18. NetworkPolicy

  • NetworkPolicy 用于定义 Pod 之间的网络访问控制规则,控制哪些 Pod 可以相互通信。

  • 它提供了一种细粒度的网络安全策略,限制访问权限。

19. ClusterRole 和 Role

  • Role 是用于在单个 Namespace 中定义权限的对象,ClusterRole 是跨所有 Namespace 的权限定义。

  • 它们与 RoleBindingClusterRoleBinding 配合使用,确保不同用户或服务帐户能够访问和操作集群中的资源。

20. ServiceAccount

  • ServiceAccount 是用于为 Pod 提供身份的对象,通常与 Kubernetes RBAC 权限系统结合使用。

  • 每个 ServiceAccount 都可以关联一些权限(通过 Role 或 ClusterRole),以控制 Pod 对集群资源的访问权限。

21. Affinity 和 Toleration

  • Affinity 用于指定 Pod 与其他 Pod 或节点之间的亲和性(affinity),即调度时如何选择合适的节点。

  • Toleration 用于允许 Pod 被调度到带有某些 taint 的节点上,反之如果没有匹配的 toleration,则 Pod 会被排除在这些节点之外。

22. StorageClass

  • StorageClass 用于动态提供存储资源,指定存储的类型和属性(如性能、持久性等)。

  • 它通常与 PVC 配合使用,自动为应用程序提供存储。

23. Event

  • Event 是 Kubernetes 中的事件对象,记录集群中资源状态的变化。

  • 它们用于帮助排查问题和监控集群健康。


总结

Kubernetes 集群中的资源可以分为多种类型,涵盖从应用部署、网络访问、安全管理、存储管理到资源限制等各个方面。了解这些资源类型及其用途,有助于更好地设计、管理和优化集群中的工作负载。

常见资源总结:

  • 计算和管理资源:Pod, Deployment, ReplicaSet, StatefulSet, DaemonSet, Job, CronJob

  • 网络和访问:Service, Ingress, NetworkPolicy

  • 存储:PersistentVolume, PersistentVolumeClaim, StorageClass

  • 配置和密钥管理:ConfigMap, Secret

  • 资源管理和配额:ResourceQuota, LimitRange

  • 权限和安全:Role, ClusterRole, ServiceAccount, RBAC

在 Kubernetes 中,通过 YAML 配置文件来部署集群中的资源(如 Pods、Deployments、Services 等)是非常常见的做法。你可以将集群资源定义在 YAML 文件中,并通过 kubectl 命令来应用这些配置文件。

1. 准备 YAML 配置文件

首先,编写一个或多个 YAML 配置文件来定义你要部署的 Kubernetes 资源。一个典型的 YAML 文件包括资源类型、名称、规格等信息。

下面是一些常见的 YAML 文件示例。

示例 1:部署 Deployment(部署)

一个简单的 Deployment 配置示例:

yaml
apiVersion: apps/v1kind: Deploymentmetadata:name: my-deploymentspec:replicas: 3selector:matchLabels:app: my-apptemplate:metadata:labels:app: my-appspec:containers:- name: my-containerimage: nginx:latestports:- containerPort: 80
  • apiVersion:指定资源版本,通常是 apps/v1

  • kind:指定资源类型,这里是 Deployment

  • metadata:资源的元数据(如名称)。

  • spec:资源的具体规格,包含副本数、Pod 模板等。

示例 2:部署 Service(服务)

一个简单的 Service 配置示例:

yaml
apiVersion: v1kind: Servicemetadata:name: my-servicespec:selector:app: my-appports:- protocol: TCPport: 80targetPort: 80type: ClusterIP
  • apiVersion:指定资源版本,通常是 v1

  • kind:资源类型,这里是 Service

  • spec:服务的具体配置,包含端口、选择器等。

示例 3:部署 PersistentVolumeClaim(PVC)

一个简单的 PVC 配置示例:

yaml
apiVersion: v1kind: PersistentVolumeClaimmetadata:name: my-pvcspec:accessModes:- ReadWriteOnceresources:requests:storage: 1Gi
  • accessModes:访问模式。

  • resources:请求的存储资源,这里是 1Gi

2. 部署应用

2.1 使用 kubectl apply 部署资源

使用 kubectl apply 命令可以将配置文件应用到 Kubernetes 集群中,创建或更新资源。

例如,如果你有一个名为 deployment.yaml 的文件来部署应用,可以使用以下命令:

bash
kubectl apply -f deployment.yaml

如果有多个 YAML 配置文件,可以同时应用它们:

bash
kubectl apply -f deployment.yaml -f service.yaml

或者,如果配置文件都在一个目录中,可以使用以下命令:

bash
kubectl apply -f ./manifests/

2.2 使用 kubectl create 部署资源

如果你希望直接创建资源(而不是更新现有资源),可以使用 kubectl create 命令:

bash
kubectl create -f deployment.yaml

3. 查看部署的资源

部署成功后,可以使用 kubectl 命令来查看资源的状态。

  • 查看 Pod 状态:

bash
kubectl get pods
  • 查看 Deployment 状态:

bash
kubectl get deployments
  • 查看 Service 状态:

bash
kubectl get services

查看 Deployment 详情:

bash
kubectl describe deployment my-deployment

查看 Pod 详情:

bash
kubectl describe pod <pod-name>

4. 管理和修改配置

  • 更新资源:如果修改了 YAML 文件并希望更新资源,可以再次执行 kubectl apply -f 命令,Kubernetes 会自动识别并更新资源。

  • 删除资源:如果需要删除已经部署的资源,可以使用 kubectl delete 命令:

bash
kubectl delete -f deployment.yaml

或指定资源类型:

bash
kubectl delete deployment my-deployment
kubectl delete service my-service

5. 示例:部署一个简单的 Web 应用

假设你要部署一个简单的 Nginx 应用,步骤如下:

  1. 创建 nginx-deployment.yaml 文件

yaml
apiVersion: apps/v1kind: Deploymentmetadata:name: nginx-deploymentspec:replicas: 2selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:latestports:- containerPort: 80
  1. 创建 nginx-service.yaml 文件

yaml
apiVersion: v1kind: Servicemetadata:name: nginx-servicespec:selector:app: nginxports:- protocol: TCPport: 80targetPort: 80type: LoadBalancer
  1. 应用这些配置

bash
kubectl apply -f nginx-deployment.yaml
kubectl apply -f nginx-service.yaml
  1. 检查资源状态

bash
kubectl get pods
kubectl get services

这时,你就成功地部署了一个 Nginx 服务,并通过 Service 暴露了该服务。

总结

通过 YAML 配置文件部署 Kubernetes 集群中的资源是管理和自动化操作的重要方法。你可以创建 Deployment、Service、Pod、PVC 等资源的配置文件,并使用 kubectl applykubectl create 来部署它们。通过这种方式,你可以清晰地管理和配置 Kubernetes 集群中的所有资源。


评论