kubernetes 之基础用法

 

前言

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

 

1. 常规用法

 

1.1 node 节点管理

 

1.1.1 查看节点

$ kubectl get no/nodes

 

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

$ kubectl drain slave2 --delete-local-data

 

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

$ kubectl delete node slave2

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

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

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

 

1.1.4 查看资源概况

$ kubectl describe nodes

$ kubectl describe node slave1

 

1.2 namespace 命名空间管理

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

 

1.2.1 查看命名空间

 

1.2.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

 

1.2.3 删除命名空间

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

 

1.3 pod 资源管理

 

1.3.1 Pod 生命周期

pod生命周期:

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

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

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

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

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

 

pod失效时的重启策略:

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

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

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

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

 

1.3.2 创建 pod 容器

编辑 demo-rc/yaml 文件:

  1. 镜像192.168.56.104:5000/nginx,是我基于Nginx镜像重新tag,并上传到docker私服的。这样做是因为 k8s 会把构建的 Pod 随机分配到 node节点去处理,无论是哪个 node去构建 Pod都要能保证能拉到镜像,所以必须用私服统一管理镜像。
  2. 镜像拉取策略 imagePullPolicy:
    1. Always - 每次都要从私服pull
    2. IfNotPresent - 本地有就不从私服拉(这是默认值)
    3. Never - 从不pull
  3. 关于镜像拉取,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,可以看到访问正常。

 

1.3.3 查看容器运行状态

  1. ready:Pod准备情况,准备就绪/Pod包含容器的总数目
  2. restarts:Pod重启次数
  3. age:Pod存活时间

 

1.3.4 查看Pod详细信息

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

kubectl describe pod [podname] -n [namespace]

 

1.3.5 更新Pod

更新:

kubectl replace -f demo-rc.yaml

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

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

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

 

1.3.6 进入Pod中的容器

  1. 命名空间非默认时需要-n 指定
  2. 如果Pod内部只有一个容器,不需要指定 -c ,默认进入第一个容器。
kubectl exec -it [pod-name] -n [namespace] -c [container-name] /bin/bash 

 

1.3.7 Pod与标签

添加标签

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

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

 

1.3.8 删除Pod

  1.  -n 删除指定命名空间下的Pod容器
  2. 如不指定,则删除的是 namespace=default 下的Pod容器
kubectl delete pod [podname] -n [namespace]    # 删除一个Pod

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

 

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

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值