容器之k8s(Kubernetes)

Kubernetes(常简称为 K8s)是一个开源的容器编排平台,最初由谷歌设计,现在由云原生计算基金会(CNCF)维护和发展。它旨在自动化容器化应用程序的部署、扩展和管理。

概述

Kubernetes 提供了一个平台,用于运行和管理容器化的应用程序。它支持集群管理、负载均衡、自动伸缩、自愈能力、服务发现和配置管理等功能,是目前最流行的容器编排工具。

主要功能

  1. 自动化部署和复制

    • 自动部署和管理容器,确保应用程序在集群中的多个副本保持一致。
  2. 负载均衡和服务发现

    • 自动为容器分配 IP 地址并配置负载均衡器,使应用程序可以轻松发现和访问彼此。
  3. 存储编排

    • 挂载存储系统,如本地存储、公共云提供商的存储、NFS、GlusterFS 等到容器中。
  4. 自愈能力

    • 自动重新启动失败的容器、替换被杀死的容器并在节点死亡时重新调度容器。
  5. 自动伸缩

    • 根据 CPU 使用情况或其他指标,自动扩展或缩减容器的副本数量。
  6. 配置管理和密钥管理

    • 管理应用程序的配置和敏感信息,如密码、OAuth 令牌等。

架构

Kubernetes 的架构主要由以下几个组件构成:

  1. 主节点(Master Node)

    • API 服务器(kube-apiserver):集群的入口点,处理 RESTful API 调用。
    • 调度器(kube-scheduler):负责将待调度的容器分配到合适的工作节点。
    • 控制器管理器(kube-controller-manager):负责集群状态的管理和维护。
    • etcd:键值存储,用于保存集群的所有数据。
  2. 工作节点(Worker Node)

    • kubelet:与主节点通信,管理本地容器的生命周期。
    • Container runtime:如 Docker 或 CRI-O,负责拉取镜像并运行容器。
    • kube-proxy:实现网络代理和负载均衡功能。
  3. 附加组件

    • Dashboard:Kubernetes 集群的 Web UI。
    • Heapster:资源监控和指标采集。
    • Cluster DNS:为容器提供 DNS 服务。

核心概念

  1. Pod

    • Kubernetes 中的最小部署单元,一个 Pod 可以包含一个或多个容器,共享网络和存储资源。
  2. Service

    • 定义一组 Pod 的访问策略,提供负载均衡和服务发现。
  3. Deployment

    • 管理 Pod 和 ReplicaSet,支持滚动更新和回滚操作。
  4. ConfigMap 和 Secret

    • ConfigMap 用于存储配置信息,Secret 用于存储敏感信息。
  5. Namespace

    • 用于逻辑隔离集群中的资源。
  6. Volume

    • 挂载到 Pod 上的存储,可以是持久化的或临时的。
  7. Ingress

    • 管理外部访问服务的路由规则,通常用于 HTTP 和 HTTPS 访问。

安装和使用

安装 Kubernetes
  1. 使用 kubeadm

    • 初始化主节点
      kubeadm init
    • 配置 kubectl
      mkdir -p $HOME/.kube
      sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
      sudo chown $(id -u):$(id -g) $HOME/.kube/config
      
    • 加入工作节点
      kubeadm join <master-ip>:<master-port> --token <token> --discovery-token-ca-cert-hash sha256:<hash>
      
  2. 使用 Minikube(适用于本地开发)

    • 安装 Minikube
      curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
      sudo install minikube-linux-amd64 /usr/local/bin/minikube
      
    • 启动 Minikube
      minikube start
      
  3. 使用 Kubernetes as a Service

    • 如 Google Kubernetes Engine (GKE)、Amazon Elastic Kubernetes Service (EKS)、Azure Kubernetes Service (AKS) 等。
使用 Kubernetes
  1. 创建一个 Pod

    • 创建一个 nginx Pod 的 YAML 文件:
      apiVersion: v1
      kind: Pod
      metadata:
        name: nginx
      spec:
        containers:
        - name: nginx
          image: nginx
          ports:
          - containerPort: 80
      
    • 使用 kubectl 创建 Pod:
      kubectl apply -f nginx-pod.yaml
      
  2. 查看 Pod 状态

    kubectl get pods
    
  3. 创建一个 Service

    • 创建一个 nginx Service 的 YAML 文件:
      apiVersion: v1
      kind: Service
      metadata:
        name: nginx-service
      spec:
        selector:
          app: nginx
        ports:
        - protocol: TCP
          port: 80
          targetPort: 80
        type: LoadBalancer
      
    • 使用 kubectl 创建 Service:
      kubectl apply -f nginx-service.yaml
      
  4. 创建一个 Deployment

    • 创建一个 nginx Deployment 的 YAML 文件:
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: nginx-deployment
      spec:
        replicas: 3
        selector:
          matchLabels:
            app: nginx
        template:
          metadata:
            labels:
              app: nginx
          spec:
            containers:
            - name: nginx
              image: nginx
              ports:
              - containerPort: 80
      
    • 使用 kubectl 创建 Deployment:
       bash 

      复制代码

      kubectl apply -f nginx-deployment.yaml

  5. 更新和回滚 Deployment

    • 更新 Deployment:
      kubectl apply -f nginx-deployment.yaml
      
    • 回滚 Deployment:
      kubectl rollout undo deployment/nginx-deployment

优缺点

优点
  1. 高可用性

    • 自动恢复故障容器,重新调度和自愈能力强。
  2. 可扩展性

    • 支持水平扩展,自动根据负载增加或减少容器数量。
  3. 灵活性

    • 支持多种容器运行时和网络插件,适应不同的需求。
  4. 丰富的生态系统

    • 提供丰富的附加组件和工具,支持各种工作负载。
  5. 强大的社区支持

    • 拥有活跃的开源社区和大量文档、教程、插件。
缺点
  1. 复杂性

    • 学习曲线陡峭,配置和管理较为复杂。
  2. 资源开销

    • 需要更多的系统资源,特别是在高可用性配置下。
  3. 网络性能

    • 某些网络配置可能会引入额外的性能开销。

适用场景

  1. 微服务架构

    • 适用于部署和管理微服务应用,支持独立的服务生命周期管理。
  2. 持续集成/持续部署(CI/CD)

    • 支持自动化部署和回滚,适合 DevOps 流程。
  3. 混合云和多云环境

    • 支持跨云平台部署和管理,提供一致的操作体验。
  4. 大规模分布式系统

    • 适用于需要高可用性和自动扩展的大规模分布式应用。
  5. 边缘计算

    • 适用于资源有限的边缘设备上运行和管理容器化应用。

Kubernetes 是目前最流行的容器编排工具,广泛应用于各种容器化应用的部署和管理。

推荐阅读:

容器之docker-CSDN博客

容器之docker compose-CSDN博客

容器之Docker Desktop-CSDN博客

k8s (Kubernetes) 之helm-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值