kubernetes的基本使用

详情请参考-非常值得看:

1、部署方式

1、部署方式的演进图

在这里插入图片描述

2、各部署方式的特点

  • **传统部署时代:**各个组织是在物理服务器上运行应用程序。 由于无法限制在物理服务器中运行的应用程序资源使用,因此会导致资源分配问题。
  • **虚拟化部署时代:**虚拟化技术允许你在单个物理服务器的 CPU 上运行多台虚拟机(VM)。 虚拟化能使应用程序在不同 VM 之间被彼此隔离,且能提供一定程度的安全性, 因为一个应用程序的信息不能被另一应用程序随意访问。
  • **容器部署时代:**容器比起 VM 被认为是更轻量级的。且与 VM 类似,每个容器都具有自己的文件系统、CPU、内存、进程空间等。
    • 敏捷应用程序的创建和部署:与使用 VM 镜像相比,提高了容器镜像创建的简便性和效率。
    • 持续开发、集成和部署:通过快速简单的回滚(由于镜像不可变性), 提供可靠且频繁的容器镜像构建和部署。
    • 关注开发与运维的分离:在构建、发布时创建应用程序容器镜像,而不是在部署时, 从而将应用程序与基础架构分离。
    • 以应用程序为中心的管理:提高抽象级别,从在虚拟硬件上运行 OS 到使用逻辑资源在 OS 上运行应用程序。
    • 松散耦合、分布式、弹性、解放的微服务:应用程序被分解成较小的独立部分, 并且可以动态部署和管理 - 而不是在一台大型单机上整体运行。

2、架构的简单说明

1、架构简图

在这里插入图片描述

  • 一组工作机器,称为 节点, 会运行容器化应用程序。每个集群至少有一个工作节点。
  • 工作节点会托管 Pod,而 Pod 就是作为应用负载的组件。
  • 控制平面管理集群中的工作节点和 Pod。
  • node,pod,container

2、各组件说明

1、控制平面组件(Control Plane Components)
1、kube-apiserver
  • Kubernetes API 服务器的主要实现是 kube-apiserver。
  • API 服务器是 负责公开了 Kubernetes API,负责处理接受请求的工作。 API 服务器是 Kubernetes 控制平面的前端。
2、etcd
  • 一致且高度可用的键值存储,用作 Kubernetes 的所有集群数据的后台数据库。
3、kube-scheduler
  • kube-scheduler 负责监视新创建的、未指定运行节点(node)的 Pods, 并选择节点来让 Pod 在上面运行。
4、kube-controller-manager
  • kube-controller-manager负责运行控制器进程。
5、cloud-controller-manager
  • cloud-controller-manager仅运行特定于云平台的控制器。在本地计算机中运行学习环境, 所部署的集群不需要有云控制器管理器
2、Node 组件

节点组件会在每个节点上运行,负责维护运行的 Pod 并提供 Kubernetes 运行环境。

1、kubelet
  • kubelet会在集群中每个节点(node)上运行。 它保证容器(containers)都运行在 Pod中。
2、kube-proxy
  • kube-proxy是集群中每个节点(node)上所运行的网络代理, 实现 Kubernetes 服务(Service)概念的一部分。kube-proxy 维护节点上的一些网络规则, 这些网络规则会允许从集群内部或外部的网络会话与 Pod 进行网络通信。
3、容器运行时(Container Runtime)
  • 容器运行环境是负责运行容器的软件。
  • Kubernetes 支持许多容器运行环境,例如 containerd 以及 ==Kubernetes CRI (容器运行环境接口)==的其他任何实现。

3、命令行工具 (kubectl)

  • 官网-命令详细参考

  • Kubernetes 提供 kubectl 是使用 Kubernetes API 与 Kubernetes 集群进行通信的命令行工具。

1、语法格式

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

其中 commandTYPENAMEflags 分别是:

  • command:指定要对一个或多个资源执行的操作,例如 creategetdescribedelete

  • TYPE:指定资源类型。资源类型不区分大小写, 可以指定单数、复数或缩写形式。例如,以下命令输出相同的结果:

    kubectl get pod pod1
    kubectl get pods pod1
    kubectl get po pod1
    
  • NAME:指定资源的名称。名称区分大小写。 如果省略名称,则显示所有资源的详细信息。例如:kubectl get pods

    在对多个资源执行操作时,你可以按类型和名称指定每个资源,或指定一个或多个文件:

  • 要按类型和名称指定资源:

  • flags: 指定可选的参数。例如,可以使用 -s--server 参数指定 Kubernetes API 服务器的地址和端口。

2、Kubectl的常用命令

  • --all-namespaces 参数的间歇为kubectl -A
1、get类
# get 命令的基本输出
kubectl get services                          # 列出当前命名空间下的所有 services
kubectl get pods --all-namespaces             # 列出所有命名空间下的全部的 Pods
kubectl get pods -o wide                      # 列出当前命名空间下的全部 Pods,并显示更详细的信息
kubectl get deployment my-dep                 # 列出某个特定的 Deployment
kubectl get pods                              # 列出当前命名空间下的全部 Pods
kubectl get pod my-pod -o yaml                # 获取一个 pod 的 YAML

# describe 命令的详细输出
kubectl describe nodes my-node
kubectl describe pods my-pod
2、apply类
kubectl apply -f ./my-manifest.yaml           # 创建资源
kubectl apply -f ./my1.yaml -f ./my2.yaml     # 使用多个文件创建
kubectl apply -f ./dir                        # 基于目录下的所有清单文件创建资源
kubectl apply -f https://git.io/vPieo         # 从 URL 中创建资源
kubectl create deployment nginx --image=nginx # 启动单实例 nginx
3、副本伸缩类
kubectl scale --replicas=3 rs/foo                                 # 将名为 'foo' 的副本集伸缩到 3 副本
kubectl scale --replicas=3 -f foo.yaml                            # 将在 "foo.yaml" 中的特定资源伸缩到 3 个副本
kubectl scale --current-replicas=2 --replicas=3 deployment/mysql  # 如果名为 mysql 的 Deployment 的副本当前是 2,那么将它伸缩到 3
kubectl scale --replicas=5 rc/foo rc/bar rc/baz                   # 伸缩多个副本控制器
4、删除类
kubectl delete -f ./pod.json                                              # 删除在 pod.json 中指定的类型和名称的 Pod
kubectl delete pod,service baz foo                                        # 删除名称为 "baz" 和 "foo" 的 Pod 和服务
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐