Kubernetes基本的使用方法 - 极悦
专注Java教育14年 全国咨询/投诉热线:444-1124-454
极悦LOGO图
始于2009,口口相传的Java黄埔军校
首页 hot资讯 Kubernetes基本的使用方法

Kubernetes基本的使用方法

更新时间:2022-12-21 10:27:32 来源:极悦 浏览904次

kubectl是Kubernetes集群的命令行工具,通过kubectl能够对集群本身进行管理,并能够在集群上进行容器化应用的安装部署.

K8s 的 Apiserver 是集群控制的入口,k8s 集群管理要在 master 节点进行,即访问部署的 Apiserver。kubectl 命令默认访问本机的 Apiserver 的 8080 端口。假如在 k8s 启动了 kubelet 服务的node 节点,想使用 k8s 集群管理命令操作。会提示如下:

常规用法

1.node 节点管理

(1)查看节点

$ kubectl get no/nodes

(2)删除一个节点前,先驱赶掉上面的pod

$ kubectl drain slave2 --delete-local-data

(3)删除slave2节点,这个节点如果从新启动kubelet服务的话,在master节点还是可以看到的该节点的

$ kubectl delete node slave2

k8s删除一个节点使用以下命令

其实以上命令是通用的,可以进行任何资源的删除:

kubectl delete [type] [typename],type 是资源类型,可以是 node, pod, rs, rc, deployment, service 等等,typename是这个资源的名称

(4)查看资源概况

$ kubectl describe nodes
$ kubectl describe node slave1

2.namespace 命名空间管理

命名空间是一个抽象出来的概念,在一个命名空间中,pod名称不允许重复。这个命名空间如果我们把他想象成我们的环境可能更好理解。我们的微服务项目需要部署到开发、测试、生产环境等。那这时候我们就可以定义3个命名空间为 dev、test、product。每个环境都要部署一套微服务容器。Pod名称在不同的 namespace 中是相同的。或者也可以把 Namespace 和 Pod 理解成数据库和表的关系。

(1)查看命名空间

(2)创建命名空间

方式1:使用命令创建

[root@master local]# kubectl create namespace esign-dev
namespace "esign-dev" created

方式2:配置文件创建命名空间

编辑配置文件:namespace-test.yaml

apiVersion: v1    #api版本号
kind: Namespace    #指定类型为Namespace
metadata:     #元数据描述
 name: test    #指定namespace名称

创建namespace

[root@master local]# kubectl apply -f ./namespace-test.yaml 
namespace "test" created

(3)删除命名空间

删除命名空间时会同时删除该空间下所有资源,就好像数据库和表的关系。开发中要谨慎操作,同时系统命名空间不会被删除

3.pod 资源管理

(1)Pod 生命周期

pod生命周期:

Pending:API Server已经创建了该Pod,但Pod中的一个或多个容器的镜像还没有创建,包括镜像下载过程

Running:Pod内所有容器已创建,且至少一个容器处于运行状态、正在启动状态或正在重启状态

Completed:Pod内所有容器均成功执行退出,且不会再重启

Failed :Pod内所有容器均已退出,但至少一个容器退出失败

Unknown:由于某种原因无法获取Pod状态,例如网络通信不畅

pod失效时的重启策略:

Always:当容器失效时,立马由kubelet自动重启该容器

OnFailure:当容器终止运行且退出码不为0时,由kubelet自动重启该容器

Never:不论容器运行状态如何,kubelet都不会重启该容器

*对于Always这种策略,容器只要挂了,就会立即重启,这样是很耗费资源的。所以Always重启策略会这么做:第一次容器挂了立即重启,如果再挂了就要延时10s重启,第三次挂了就等20s重启...... 依次类推

(2)创建 pod 容器

编辑 demo-rc/yaml 文件:

镜像192.168.56.104:5000/nginx,是我基于Nginx镜像重新tag,并上传到docker私服的。这样做是因为 k8s 会把构建的 Pod 随机分配到 node节点去处理,无论是哪个 node去构建 Pod都要能保证能拉到镜像,所以必须用私服统一管理镜像。

镜像拉取策略 imagePullPolicy:

Always - 每次都要从私服pull

IfNotPresent - 本地有就不从私服拉(这是默认值)

Never - 从不pull

关于镜像拉取,Pod 构建 docker 容器时,会执行docker pull 将镜像从私服拉到本地。且其默认执行策略是如果本地有就不再pull。所以如果我们用jenkins构建应用服务时,首先需要将镜像上传到私服,且 Pod 的执行策略也必须是每次都要从私服Pull,否则它Pull 一次之后。将不再拉取最新构建的镜像。

apiVersion: v1    #描述的是Api版本
kind: Pod    #指定的是Pod类型
metadata:    #描述该Pod的元数据信息
  name: nginx    #Pod名称    
  namespace: esign-dev    #指定该Pod所属的命名空间,这个命名空间需要提前创建好。否则报错
  labels:
    owner: jpjinga    #给Pod添加自定义标签,key、value都是自定义
spec:
  containers:
    - name: nginx
      image: 192.168.56.104:5000/nginx:latest
      imagePullPolicy: Always    #一直从远程仓库拉取
      ports:
      - containerPort: 80    #容器端口
        hostPort: 8081    #映射的主机端口
        name: web
        protocol: TCP

创建并启动 pod

获取Pod

kubectl get po -n esign-dev    #获取指定命名空间的Pod资源
kubectl get po --all-namespaces -o wide    #获取所有命名空间的Pod资源

我们看一下Pod启动后的具体信息:

kubectl describe pod nginx -n esign-dev

我们切换到主机名为 slave1(192.168.56.102)的节点,查看运行容器。可以发现 k8s 运行的是一个Pod基础容器,我们在上一篇搭建k8s集群node节点时,配置过这个Pod基础镜像。Pod是K8s管理的最小单元。在这个Pod里运行的是Nginx容器。主机对Pod内部容器的端口映射是:8081->80。

我们用浏览器来访问一下这个Nginx,可以看到访问正常。

(3)查看容器运行状态

ready:Pod准备情况,准备就绪/Pod包含容器的总数目

restarts:Pod重启次数

age:Pod存活时间

(4)查看Pod详细信息

说明:查看的pod所属命名空间namespace != dufault 时,需要-n 指定其命名空间才可以看到

kubectl describe pod [podname] -n [namespace]

(5)更新Pod

更新:

kubectl replace -f demo-rc.yaml

由于Pod的很多属性没办法修改,比如容器镜像,这时候可以采用--force参数

kubectl replace --force -f demo-ng.yaml

看运行效果,就相当于删掉后重新构建了一个Pod:

(6)进入Pod中的容器

命名空间非默认时需要-n 指定

如果Pod内部只有一个容器,不需要指定 -c ,默认进入第一个容器。

kubectl exec -it [pod-name] -n [namespace] -c [container-name] /bin/bash 

(7)Pod与标签

添加标签

kubectl label pod [podname] -n [namespace] key=value    #指定pod,添加自定义标签

查询Pod时,展示标签内容:

(8)删除Pod

-n 删除指定命名空间下的Pod容器

如不指定,则删除的是 namespace=default 下的Pod容器

kubectl delete pod [podname] -n [namespace]    # 删除一个Pod
kubectl delete pod --all -n [namespace]    # 删除所有Pod

(9)查看容器日志,参数-f 可以监控实时日志

kubectl logs [-f] -n [namespace] [podName] -c [containerName]

 

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>