K8S入门介绍和实战

2024-01-02 08:31:19

1. 什么是 Kubernetes?

????????Kubernetes(简称为K8s)是一个开源的容器编排平台,用于自动化容器化应用程序的部署、扩展和管理。它最初由Google设计,并于2014年发布为开源项目,现由云原生计算基金会(CNCF)维护。Kubernetes的目标是简化应用程序的部署、扩展和管理,并提供高度可扩展的、自动化的容器集群解决方案。

Kubernetes提供了一个用于自动化部署、扩展和管理容器化应用程序的平台。它具有以下特点:

  • 容器编排:Kubernetes能够对容器进行编排和管理,有效地调度和运行应用程序容器。

  • 自动化部署:它支持自动化部署,能够方便地发布和更新应用程序。

  • 水平扩展:Kubernetes能够根据负载自动扩展应用程序,保证高可用性和性能。

  • 服务发现和负载均衡:它提供了服务发现机制,能够自动注册和发现服务,同时提供负载均衡功能。

  • 自愈机制:Kubernetes具有自我修复和自动重启功能,能够及时恢复故障或异常的容器。

  • 弹性和可移植性:它能够在不同的环境中运行,支持多云、混合云和本地环境。

  • 可扩展性:Kubernetes是高度可扩展的,支持定制化和插件扩展,能够满足各种需求。

官网:Kubernetes

2. K8S基本概念

  • Pod: Pod是Kubernetes中最小的可部署单元,通常包含一个或多个容器。Pod提供了一个隔离的运行环境,容器可以共享资源和网络。
  • Deployment: Deployment允许定义Pod的模板和副本数量,并管理Pod的生命周期。它确保Pod的副本数符合指定的状态。
  • Service: Service定义了一组Pod的访问方式,通过标签选择器将请求路由到对应的Pod。
  • Namespace: Namespace提供了一个逻辑隔离的环境,用于分隔不同团队或应用程序的资源。

3. K8S组件

3.1 Master节点

  • API Server:Kubernetes API的前端,处理用户请求。
  • Scheduler:负责将新创建的Pod分配到可用的节点。
  • Controller Manager:负责管理集群的控制器,确保期望状态和实际状态一致。

3.2 Node节点

  • Kubelet:管理节点上的容器,并与Master节点通信。
  • Kube-proxy:负责为Service提供网络代理和负载均衡。

4. K8s集群搭建

搭建k8s集群的最小节点需要3台,集群包含以下几种节点:

  • 主节点(Master Node)

    • 控制平面节点,负责管理整个集群。
    • 包含 API Server、Scheduler、Controller Manager 等核心组件。
    • 通常建议至少有两个主节点来提供冗余和高可用性。
  • 工作节点(Worker Node)

    • 执行应用程序工作负载的节点。
    • 运行Pod和容器,并接收主节点下发的任务。

在最小配置下,一个简单的Kubernetes集群至少需要1个主节点和2个工作节点,这样可以保证基本的高可用性和容错能力。在生产环境中,建议增加更多的节点来提高性能和稳定性。

在测试或学习环境中,可以使用Minikube、kind或K3s等工具来快速搭建单节点K8s集群,而不需要多台机器。但是在生产环境中,肯定需要配置多个节点来确保高可用性和容错。

下一篇我会写如何用Minikube搭建k8s集群,感兴趣的小伙伴们到时候可以看一下。

如果电脑上安装了虚拟机的小伙伴们,也可以在虚拟机里搭建k8s集群,注意也是需要三台节点。

搭建过程参考:

?手把手教你在centos7安装k8s集群_centos7搭建k8s集群-CSDN博客

?初始化K8S集群_k8s重新初始化-CSDN博客

?云原生-K8s】k8s可视化管理界面安装配置及比较【Kuboard篇】_k8s管理界面-CSDN博客

5. K8S使用场景

  • 容器编排和自动化部署: k8s作为一个容器编排平台,能够有效地管理和部署容器化应用程序。可以自动化应用程序的部署、扩展和更新,简化了复杂应用的管理和维护。

  • 微服务架构: 对于采用微服务架构的应用,k8s提供了理想的部署环境。能够对多个微服务进行管理,有效解决微服务拆分和部署的复杂性。

  • 容器化应用开发和测试: 可以利用Kubernetes在本地或云端轻松搭建开发和测试环境。k8s提供了标准化的环境,支持快速迭代和部署。

  • 弹性和自动化扩展: k8s能够根据负载自动扩展应用程序,根据需求调整副本数量,保障应用的高可用性和性能。

  • 多云和混合云部署: 适用于多云环境和混合云部署,k8s可以跨多个云供应商或本地数据中心进行统一管理和部署。

  • 持续集成和持续交付(CI/CD): 结合CI/CD工具,k8s可以实现持续集成和持续交付流程,自动化构建、测试和部署应用程序。

  • 监控和日志管理: k8s提供了监控和日志管理功能,支持对容器和集群的性能和状态进行监控、调试和故障排除。

  • 故障恢复和自我修复: 通过自动重启和替换故障容器、节点的功能,k8s能够确保应用程序的高可用性和稳定性。

  • 服务发现和负载均衡: k8s提供了内建的服务发现和负载均衡机制,能够管理和路由流量到正确的服务。

下面看一下它的运行架构图

6. K8S优势

  • 自动化部署和扩展: 通过自动化机制,可以减少人工操作,提高效率。

  • 容器编排: 可以高效的对容器进行编排,管理多个容器的部署和关联。

  • 高可用性: 支持高可用性配置,通过在集群中部署多个副本实例,保证服务的高可用性。

  • 弹性伸缩: 能够自动水平扩展应用程序,增加或减少容器的数量以满足不同的流量需求。

  • 多环境部署: 可以在多种环境中部署,包括公有云、私有云和混合云环境,强大的跨平台能力。

  • 资源管理和调度: 能够有效地管理和调度集群中的资源,根据需求分配CPU、内存等资源,优化资源利用率。

  • 服务发现和负载均衡: 提供了内置的服务发现机制和负载均衡功能,能够自动管理服务之间的通信和流量分发。

  • 持续交付和自动化运维: 结合CI/CD工具,支持持续交付流程,自动化地构建、测试和部署应用程序。

  • 可扩展性:支持定制化和插件扩展,能够满足不同规模和复杂度的应用需求。

  • 监控和日志:提供了丰富的监控和日志管理功能,能够实时监控集群状态和容器运行情况,便于故障排查和调优。

7. kubectl 常用命令

kubectl是Kubernetes的命令行工具,用于管理Kubernetes集群中的各种资源。以下是一些常用的kubectl命令:

# 查看集群信息和状态:
kubectl cluster-info: 显示集群信息。
kubectl get nodes: 查看集群中的节点信息。
kubectl get pods: 查看当前命名空间下的所有Pod。

# 创建和管理资源:
kubectl create: 创建资源,如kubectl create deployment <name>创建一个Deployment。
kubectl apply: 使用YAML或JSON文件部署或更新资源。
kubectl delete: 删除资源,如kubectl delete pod <name>删除一个Pod。
# 查看和管理资源状态:

kubectl describe: 查看资源详细信息,如kubectl describe pod <name>查看Pod详细信息。
kubectl logs: 查看Pod的日志信息,如kubectl logs <pod-name>。
# 暴露服务和端口:

kubectl expose: 创建一个新的Service。
kubectl port-forward: 将本地端口转发到Pod的端口,如kubectl port-forward <pod-name> <local-port>:<pod-port>。
# 修改资源:

kubectl edit: 编辑资源的配置,如kubectl edit pod <name>编辑Pod的配置。
kubectl patch: 修改资源的部分属性。
# 命名空间管理:

kubectl create namespace: 创建一个新的命名空间。
kubectl get namespaces: 查看所有命名空间。
# 应用升级和扩缩容:

kubectl set image: 更新Deployment的镜像版本。
kubectl scale: 调整Deployment或ReplicaSet的副本数量。
# 调试和诊断:

kubectl exec: 在容器中执行命令,如kubectl exec -it <pod-name> -- /bin/bash进入Pod的shell。
kubectl describe pod: 查看Pod的详细描述,以排查问题。
kubectl top: 查看集群资源的使用情况,如kubectl top nodes或kubectl top pods。

所有pod的运行情况?

8. K8S实战示例

下面是k8s部署nginx的示例:

1. 创建一个Deployment

创建一个名为nginx-deployment.yml(名字随意),主要是用来定义nginx的Deployment,在文件中写入以下内容:

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-container
        image: nginx:latest
        ports:
        - containerPort: 80

执行命令创建Deployment

kubectl apply -f nginx-deployment.yaml

2.?创建一个ngninx Service

创建一个名为nginx-service.yaml的YAML文件:主要用于暴露外部服务端口

apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  type: NodePort
  selector:
    app: nginx
  ports:
    - protocol: TCP
      port: 30088
      targetPort: 80

执行命令应用service?

kubectl apply -f nginx-service.yaml

其实上面两个文件可以写到一起,执行一次命令即可,看大家习惯

3. 检查部署和服务状态

# 查看所有的deployments
kubectl get deployments

# 查看所有正在运行pod
kubectl get pods -ALL

# 查看定义的service
kubectl get services

# 查看pod 创建启动信息,描述
kubectl describe  Pod名字 

# 查看pod 运行日志
kubectl logs -f Pod名字

下面的name就是pod名称,它的status是running状态才表示部署成功,然后通过service里定义的端口进行访问。?

9. 总结

????????Kubernetes作为容器编排平台,在容器化应用的部署、管理和扩展方面提供了强大的功能和工具。通过使用K8S的组件和概念,开发者可以轻松地构建高可用、自动化和弹性的应用程序。目前国内流行云原生,其实就是容器化技术,本章内容介绍了K8s的基本概念、组件、使用场景、优势以及提供简单的示例来帮助小伙伴们了解K8S并开始实践。大家可以根据需求进一步深入学习K8s,探索更多高级功能和最佳实践。如果在搭建的过程中遇到问题,也欢迎大家一起交流。

文章来源:https://blog.csdn.net/EverythingAtOnce/article/details/135288816
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。