K8S入门介绍和实战
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可视化管理界面安装配置及比较【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,探索更多高级功能和最佳实践。如果在搭建的过程中遇到问题,也欢迎大家一起交流。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!