k8s技术总结(一)

在学习完docker之后,也很有必要再学习k8s的一些理论和技术。

一、基础概念

kubernetes(k8s)和docker在容器管理领域具有不同的侧重点和优势。当前docker主要关注单个容器的构建、运行和管理,而k8s则专注于大规模的容器编排和管理。k8s在以下几个特性中,更具有优势。

特性1:自动化部署和管理

特性2:服务发现和负载均衡

特性3:自动扩展、自愈能力

简单说,k8s属于master-worker架构,master节点负责核心调度,管理,worker节点用来执行用户程序。建议master节点单独部署(一台实体服务器),但可以有多个master node。master node所需的一些组件,kube-apiserver、scheduler、etcd。worker node所需的一些组件,kubelet、kube-proxy、container runtime。

                                                                            k8s服务参考图

二、k8s集群的操作和命令

1、我们使用kubectl,kubectl 是与 Kubernetes 集群交互的主要命令行工具。其基本语法结构为:

kubectl [command] [TYPE] [NAME] [flags]

2、常见操作命令

集群相关

# 查看所有节点
kubectl get nodes
# 查看集群信息
kubectl cluster-info

pod:Pod 是 Kubernetes 中的最小可部署单位,代表一组紧密耦合的容器。每个 Pod 包含一个或多个容器,这些容器共享网络和存储。通常,一个 Pod 运行一个主容器(例如,Web服务器),以及一些辅助容器(如日志收集、监控代理等)。

Pod 通常不直接创建,而是通过更高级别的控制器(如 Deployment)来管理。

相关操作:

# 查看Pod列表
kubectl get pods
# 查看指定命名空间下的Pod
kubectl get pods -n <namespace>
# 详细描述Pod:输出Pod的详细信息,包括事件、状态、配置信息等
kubectl describe pod <pod-name>
# 查看Pod的日志
kubectl logs <pod-name>
# 进入Pod的容器
kubectl exec -it <pod-name> -- /bin/bash
# 删除Pod
kubectl delete pod <pod-name> --force

service:是一种用于定义一组 Pod 的网络访问策略的资源对象。它为外部系统或内部组件提供了稳定的访问入口,即使这些 Pod 的 IP 地址会随着 Pod 的创建和销毁而变化。Service 通过将流量分发到符合选择条件的 Pod 来实现负载均衡。

Kubernetes 支持多种类型的 Service,不同类型的 Service 适用于不同的网络需求:

  1. ClusterIP(默认类型)

    • 仅在集群内部可访问。
    • 为 Service 创建一个虚拟 IP(Cluster IP),用于在集群内部的其他服务间进行通信。
    • 适用于服务之间的内部通信。
  2. NodePort

    • 将服务暴露在每个节点的某个端口上(范围是 30000-32767),通过 <NodeIP>:<NodePort> 访问。
    • 适用于需要从集群外部直接访问服务的情况。
  3. LoadBalancer

    • 在支持的云环境中(如 AWS、GCP),自动创建一个外部负载均衡器,并将其与 Service 关联。
    • 将流量转发到 Service 对应的 NodePort 或 ClusterIP。
    • 适用于需要自动创建云提供商的负载均衡器来暴露服务的情况。
  4. ExternalName

    • 将服务的 DNS 名称映射到外部的 DNS 名称。
    • 没有选择器,与其他服务类型不同,它不会选择集群中的 Pod,而是返回 CNAME 记录。
    • 适用于访问集群外部的资源,如数据库服务。

相关操作:

# 查看Service列表:列出所有Service及其对应的ClusterIP、外部IP等信息
kubectl get services
# 查看Service详细信息
kubectl describe service <service-name>
# 删除service
kubectl delete service <service-name>

deployment:Deployment 是一种用于管理应用程序的 Kubernetes 控制器。它提供声明式更新机制,使你能够管理应用的副本数量、更新策略等。Deployment 是管理 Pod 的常用方式,它确保指定数量的 Pod 始终运行,并且可以自动执行滚动更新和回滚操作。

相关操作:

# 创建Deployment:使用指定镜像创建一个新的Deployment
kubectl create deployment <deployment-name> --image=<image-name>
# 查看Deployment列表
kubectl get deployments
# 查看Deployment详细信息
kubectl describe deployment <deployment-name>
# 更新Deployment的镜像:更新Deployment中容器的镜像,会触发滚动更新
kubectl set image deployment/<deployment-name> <container-name>=<new-image>
# 扩展或缩减Deployment的Pod副本数
kubectl scale deployment <deployment-name> --replicas=<number>
# 编辑Deployment
kubectl edit deployment <deployment-name>
# 删除Deployment
kubectl delete deployment <deployment-name>

ConfigMap资源:是 Kubernetes 中用于存储非机密配置信息的对象。它将配置信息以键值对的形式存储,可以将这些配置注入到容器中作为环境变量、命令行参数,或挂载为文件。ConfigMap 允许配置与容器镜像分离,使得应用程序更易于配置和管理。

相关操作:

# 创建ConfigMap
kubectl create configmap <configmap-name> --from-literal=<key>=<value>
# 查看ConfigMap列表
kubectl get configmaps
# 查看ConfigMap详细信息
kubectl describe configmap <configmap-name>
# 编辑Configmap
kubectl edit configmap <configmap-name>

命名空间:是 Kubernetes 中用于资源隔离的逻辑分区。它允许你在同一个集群中隔离不同的项目或团队的资源。每个 Namespace 之间的资源是独立的,例如 Pod、Service 等,因此可以避免不同应用或团队之间的冲突。

相关操作:

# 查看命名空间列表
kubectl get namespaces
# 创建新的命名空间
kubectl create namespace <namespace-name>
# 删除命名空间
kubectl delete namespace <namespace-name>
# 在指定命名空间中操作:可以用 -n 标志指定操作的命名空间
kubectl get pods -n <namespace-name>

资源监控

# 持续监控pod
kubectl get pods -w
# 监控特定资源
kubectl top pod

 

posted @ 2024-08-12 13:19  jpx  阅读(129)  评论(0编辑  收藏  举报