k8s学习笔记(二)

k8s是一款容器编排平台,实现了容器编排功能。笔者在上一章中创建第一个pod并去尝试解决存在的一些问题,在这章中,笔者将会着重于k8s的入门以及一些基础命令的记录理解学习。

控制平面

  1. API Server (即Master节点) (6443 端口) 用户认证:双向认证
  2. Scheduler
  3. Controller

API Server

API server核心功能是提供了k8s各类资源对象(Pod,RC,service)的增,删,改,查及HTTP REST接口。server是通过一个名为kube-apiserver的进程提供服务。该进程运行在master节点上,默认情况下,在本机8080端口提供REST服务。

通常我们可以通过命令行工具kubectl来与API server交互。它们之间的接口是REST调用。为了测试和学习API server所提供的接口,也可以使用curl命令行工具进行快速验证。

API server作为集群的核心,负责各个功能模块之间的通信。集群中各个模块通过API server将信息存入etcd,当需要获取和操作这些数据时,则通过API server提供的REST接口来实现,从而实现各模块之间的信息交互。

Scheduler

kubernetes Scheduler 运行在 master 节点,它的核心功能是监听 apiserver 来获取 PodSpec.NodeName 为空的 pod,然后为每个这样的 pod 创建一个 binding 指示 pod 应该调度到哪个节点上。

Controller

Controller Manager作为集群内部的管理控制中心,负责集群内的Node,Pod副本,服务端点(endpoint),命名空间(namespace)等的管理,当某个Node意外宕机,CM会及时发现此故障并执行自动化修复流程,确保集群始终处于预期的工作状态。

Cite from:https://www.jianshu.com/p/a36682a848e1

k8s常用命令

在这里插入图片描述

#kubectl -h

显示子命令,其中包括了查找命令。
Node是集群级别的资源,而整个集群又可以划分为多个名称和空间。
在这里插入图片描述
使用如下命令,可以查看node的运行状态以及是否存在

#kubectl get nodes

在这里插入图片描述
使用如下命令可查看pods,也就是最小单元,并且可以查看运行状态,在上一章中,笔者在让pods运行上花了很长的时间。要么是出现Error要么是pending状态。

# kubectl get pods

我们也可以用命令查看有几个名称空间,我们在之前的学习中已经了解到,名称空间的英文是namespace,所以在命令中采取它的缩写ns。

# kubectl get ns

在这里插入图片描述
我们可以看到,笔者的名称空间内有4个活动的项。每指定一个名称空间时,默认都是default。Kube-public是任何人都能访问的。Kube-system存放系统文件。使用如下命令即可查看里面存放的一些文件。

# kubectl get pods -n kube-public
# kubectl get pods -n kube-system

在这里插入图片描述
使用如下命令时显示长格式信息,就像ls -l一样。

# kubectl get pods -n kube-system -o wide

在这里插入图片描述

在上一章中,我们已经接触了创建命令也就是create命令。我们可以在之前kubectl -h中找到具体的使用方法。就比如我们现在可以看一下当前系统上支持多少种资源类型。

# kubectl api-resources

在这里插入图片描述
同样的,当我们想要知道这个系统上存在多少个deploy控制器时,我们只需要输入以下命令。

# kubectl get deploy

在这里插入图片描述
目前在笔者的系统上只有一个deploy那就是nginx-demo。

我们可以创建一个新的名称空间,输入以下命令即可,指定一个名称,比如说develop

# kubectl create namespace develop

在这里插入图片描述
可以看到,我们已经成功创建了develop,testing,prod的namespace。并且我们可以使用kubectl get ns来查看namespace。

那么我们怎么删除命名空间呢?

使用以下命令

# kubectl delete namespaces develop

在这里插入图片描述
可以看到,已经删除了。当然也可以用ns来代替namespace,并且可以把namespace与ID中间的空格替换为/。同时也可以删除多个资源。

那么怎么查看一个指定的namespace信息呢?

输入以下命令

# kubectl get ns/default

我们可以得到是default的namespace。
在这里插入图片描述
我们这时候可以获得一下 yaml 文件中的信息。

在这里插入图片描述
在这里我看可以看到,一个yaml文件中有5个主要信息。这是个标准格式。

apiVersion, kind, metadata, spec, status

在这里插入图片描述
此时我们使用describe来查看当前的状态信息。

我们现在创建一个nginx的配置,命名为ngx-dep,使用的是nginx:1.14-alpine镜像。使用如下命令:

# kubectl create deploy ngx-dep --image=nginx:1.14-alpine

在这里插入图片描述
可以看到,已经创建成功。这时候会存在一个pod,并且这个pod是依靠nginx:1.14来实现的。我们这时候用kubectl get all来获得所有资源。可以看到,笔者现在已经有两个pod了。
在这里插入图片描述
我们如果让它只显示pods,我们可以输入get pods。

在这里插入图片描述
这时候我们直接去访问根据ip地址。输入以下命令即可实现通信。

# curl IP

在这里插入图片描述
如果要删除pod,那么我们只需要输入以下命令。

kubectl delete pods/ID

删除后会生成一个新的pod,并且需要新的ip地址通信。

那么怎么彻底删除一个pod呢?
输入以下命令即可

# kubectl delete deployment ID

在这里插入图片描述
那么我们怎么创建一个service呢?

使用如下命令

# kubectl create service clusterip ngx-svc --tcp=80:80

在这里插入图片描述
此时我们可以用如下命令查看详细信息

# kubectl get svc/ngx-svc -o yaml

在这里插入图片描述
它显示本地80,远程也是80。这个没有指定哪个pod。因此这种写法是有问题的,我们把它删除并重新创建。
在这里插入图片描述
此时IP地址已重新分配。我们可以用describe命令去查看。
在这里插入图片描述
此时我们去通信这个ip地址。
在这里插入图片描述
我们可以得到这个服务。我们将原有的pods删除,然后得到新的pods,用describe命令去查看。
在这里插入图片描述
此时这个service有个新的endpoints,这个service会通知到相应的客户端做出改变。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值