K8s基础管理

K8s基础管理

Pod概述

  • Pod是K8s中最小的管理元素
  • 一个Pod包涵1个或多个容器(共享网络,共享存储)
  • Pod支持横向扩展和复制
Pod生命周期
  • Pod对象自从其创建开始至其终止退出的时间范围称为其生命周期。在这段时间中,Pod会处于多种不同的状态,并执行一些操作,其中,创建主容器(main container)为必需的操作,其他可选的操作还包括运行初始化容器(init container)、容器启动后钩子(post start hook)、容器的存活性探测(liveness probe)、就绪性探测(readiness probe)以及容器终止前钩子(pre stop hook)等,这些操作是否执行则取决Pod的定义
Pod phase(相位)
PodStatus 对象说明
Pending容器创建过程中,但它尚未被调度完成
Running所有容器都已经被kubelet创建成功
Succeeded所有容器都已经成功终止了并不会被重启
FailedPod中的所有容器中至少有一个容器退出是非0状态
Unknown无法正常获取到Pod对象的状态信息
Pod创建过程

在这里插入图片描述

  1. 客户端提交创建请求,可以通过API server的Restful API ,也可以使用kubectl命令行工具。支持的数据类型有JSON和YAML
  2. API Server处理用户请求,存储Pod数据到etcd数据库
  3. 调度器通过API Server在Scheduler调度器查看未绑定的Pod
  4. 经过调度预选(Scheduler调度器用一组规则过滤掉不符合要求的主机),调度优选(对调度预选后的主机进行算法打分),最后选择打分最高的主机,进行binding操作,并记录到etcd中
  5. kubelet根据调度结果执行Pod创建操作,创建成功后,Scheduler会调用API Server的API在etcd中创建一个boundpod对象,描述在一个工作节点上绑定运行的所有pod信息。
  6. 运行在每个工作节点上的kubelet也会定期与etcd同步boundpod信息,一旦发现应该在该工作节点上运行的boundpod对象没有更新,就调用Docker API创建并启动pod内的容器。

Deployment

  • Deployment / RC(Replication Controll)/ RS (ReplicaSet)都是资源控制器
  • Deployment 为Pod和ReplicaSet 提供了一个声明定义方法 用来替代RC
    • 定义Deployment来创建Pod和ReplicaSet
    • 滚动升级和回滚应用
    • 扩容和缩容
    • 暂停和继续Deployment

资源对象文件

  • 资源对象文件一般由用户根据需求编写
  • 格式可以是json、yaml
  • kubectl get 资源对象 资源名称 -o 格式 来查询一个资源对象文件
kubectl get deployment apache -o yaml
Pod资源文件格式
---                #资源定义起始标志
apiVersion: v1     #当前格式的版本
kind: Pod          #当前创建资源的类型
metadata:          #当前资源的元数据
  name: pod-example  #当前资源的名称(Pod)
  labels:            #当前资源的卷标
    app: myos        #卷标,可被引用
spec:                #当前资源的详细定义
  containers:        #容器定义
  - name: myos       #容器名称,多容器在一个Pod中名称不能重复
    image: 192.168.1.100:5000/myos:v1804     #启动容器的镜像地址
    stdin: true                              #交互式 即-i后台服务不需要
    tty: true                                 #分配终端,即-t 后台服务不需要
  restartPolicy: Always                       #资源重启策略[Always,OnFailure,Never]
  #Always是默认策略

使用

kubectl apply -f pod-example.yaml  #使用上面资源文件
pod/pod-example created
kubectl get pod   #查看
NAME          READY   STATUS    RESTARTS   AGE
pod-example   1/1     Running   0          11s

kubectl delete -f pod-example.yaml  #删除
pod "pod-example" deleted
deployment格式
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment-example   #当前资源(deployment)的名字
spec:                        #当前资源的详细定义
  selector:                  #资源匹配选择器,主要确定资源的方式
    matchLabels:             #匹配卷标
      app:myapp              #具体匹配的东西,labels里面定义的 键值
  replicas: 1                #POD副本数量
  template:                  #资源模板(需要包含至少一个POD的定义)
    ......                   #以下为POD的定义

K8s系统命名空间

查看命名空间的命令

kubectl get namesapce
NAME              STATUS   AGE
default           Active   47h
kube-node-lease   Active   47h
kube-public       Active   47h
kube-system       Active   47h
  • default 默认的命名空间,不声明命名空间的POD都在这里
  • kube-node-lease为高可用提供心跳监视的命名空间
  • kube-public 公共数据,所有用户都可以读取它
  • kube-system 系统服务对象所使用的命名空间

查看命名空间中的资源对象

kubectl -n kube-system get pod
NAME                             READY   STATUS    RESTARTS   AGE
coredns-f6bfd8d46-5kbv2          1/1     Running   3          47h
coredns-f6bfd8d46-dgh77          1/1     Running   3          47h
etcd-master                      1/1     Running   3          47h

Kubernetes基础管理

kubectl命令

语法格式: kubectl [command] [TYPE] [NAME] [flags]\

  • command:子命令 create 、get 、 describe、 delete
  • type: 资源类型,可以表示为单数,复数或缩写形式
  • name: 资源的名称,如果省略,则显示所有资源信息
  • flags: 指定可选标志,或附加的参数
命令格式命令说明
kubectl run 资源名称 -参数 --image=镜像名称:标签创建资源对象,-i交互,-t终端
kubectl get 查询资源 可选参数 -o wide 显示主机信息常用查询的资源 node | deployment | pod
kubectl exec -it 容器id 执行的命令同docker exec ,进入容器
kubectl describe 资源类型 资源名称查询资源的详细信息
kubectl attach同docker attach 指令,连接容器
kubectl logs 容器id查看容器控制台的标准输出
kubectl delete 资源类型 资源名称删除指定的资源
kubectl create | apply -f 资源文件执行指定的资源文件
  • 命令使用
#执行指定资源文件   配置网络插件
kubectl apply -f kube-flannel.yml

kubectl get nodes   #查看信息
NAME        STATUS   ROLES    AGE   VERSION   #网络插件安装完成
master      Ready    master   42h   v1.17.6
node-0001   Ready    <none>   41h   v1.17.6
node-0002   Ready    <none>   41h   v1.17.6
node-0003   Ready    <none>   41h   v1.17.6

kubectl -n kube-system get pods   #查看  kube-system 是K8s项目预留的系统Pod的工作空间
#不是Linux的Namespace  只是K8s划分不同工作空间的单位
NAME                             READY   STATUS    RESTARTS   AGE
coredns-f6bfd8d46-5kbv2          1/1     Running   3          42h
coredns-f6bfd8d46-dgh77          1/1     Running   3          42h
etcd-master                      1/1     Running   3          42h
kube-apiserver-master            1/1     Running   3          42h
kube-controller-manager-master   1/1     Running   3          42h
kube-flannel-ds-amd64-65bhp      1/1     Running   3          41h
kube-flannel-ds-amd64-9q9d4      1/1     Running   5          41h
kube-flannel-ds-amd64-cbnjf      1/1     Running   3          41h
kube-flannel-ds-amd64-fs76r      1/1     Running   6          41h
kube-proxy-dndvj                 1/1     Running   7          41h
kube-proxy-dq6pz                 1/1     Running   7          41h
kube-proxy-r89h7                 1/1     Running   7          42h
kube-proxy-vwhhl                 1/1     Running   7          41h
kube-scheduler-master            1/1     Running   3          42h



#describe查看详细信息
kubectl -n kube-system describe pod kube-flannel-ds-amd64-65bhp   
Name:         kube-flannel-ds-amd64-65bhp
Namespace:    kube-system
.....
Events: #关注Events   可以查看操作信息  Debug的重要依据 出现问题第一时间查看这个
......


#run 启动容器
kubectl run testos -it --image=192.168.1.100:5000/myos:v1804

kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead.
If you don't see a command prompt, try pressing enter.
[root@testos-6d7c98965-88njw /]# ps                 #成功进入了
  PID TTY          TIME CMD
    1 pts/0    00:00:00 bash
   21 pts/0    00:00:00 ps

exit  退出


#直接启动服务
kubectl run web-test --image=192.168.1.100:5000/myos:httpd

Session ended, resume using 'kubectl attach testos-6d7c98965-88njw -c testos -i -t' command when the pod is running

#查看节点
kubectl get pod -o wide    #get node 也可以加-o wide 多打印信息
NAME  READY   STATUS    RESTARTS   AGE    IP           NODE        NOMINATED NODE   READINESS GATES
t...   1/1     Running   1        4m4s   10.244.1.2   node-0001   <none>             <none>
w...   1/1     Running   0        12s    10.244.2.4   node-0002   <none>             <none>


curl http://10.244.2.4/info.php  #尝试访问
<pre>
Array
(
    [REMOTE_ADDR] => 10.244.0.0
    [REQUEST_METHOD] => GET
    [HTTP_USER_AGENT] => curl/7.29.0
    [REQUEST_URI] => /info.php
)
php_host:       web-test-7bf98b9576-6zqnk
1229
#容器启动了

#exec 进入容器                             -- 后面跟shell命令 不然无法识别shell命令参数
kubectl exec -it testos-6d7c98965-88njw -- /bin/bash
[root@testos-6d7c98965-88njw /]# exit

#attach 进入容器
kubectl attach -it testos-6d7c98965-88njw
[root@testos-6d7c98965-88njw /]# exit    #退出

kubectl get pods -o wide   #查看pod
NAME     READY   STATUS    RESTARTS   AGE   IP           NODE        NOMINATED NODE   READINESS GATES
t..      1/1     Running   2          24m   10.244.1.2   node-0001   <none>           <none>
w..      1/1     Running   0          21m   10.244.2.4   node-0002   <none>           <none>

#testos的RESTARTS变成2了   attach退出关闭了一次



#查看终端日志
kubectl logs testos-6d7c98965-88njw

#删除资源,直接删除POD会自动重建
kubectl delete pod web-test-7bf98b9576-6zqnk
pod "web-test-7bf98b9576-6zqnk" deleted     #pod删除

kubectl get pod -o wide   #再次查看pod  发现还在   重新创建了
NAME  READY   STATUS    RESTARTS   AGE    IP     NODE        NOMINATED NODE   READINESS GATES
t...   1/1     Running   3          161m   10.244.1.2   node-0001   <none>           <none>
w...   1/1     Running   0          83s    10.244.2.5   node-0002   <none>           <none>


#删除资源
kubectl delete deployments   testos   #deployments删除
deployment.apps "testos" deleted

kubectl get pod -o wide  #再次查看
#               t..的状态变成Terminating
NAME   READY   STATUS        RESTARTS   AGE     IP      NODE        NOMINATED NODE   READINESS GATES
t...   1/1     Terminating   3          166m    10.244.1.2   node-0001   <none>           <none>
w...   1/1     Running       0          6m19s   10.244.2.5   node-0002   <none>           <none>

#再次查看
kubectl  get pod -o wide    #会发现t...的pod没了

K8s集群中,latest标签是不会缓存的,所以需要修改标签来缓存


简单web集群案例

vim web-example.yaml
===========================
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: apache-example
spec:                  #详细设置
  selector:             
    matchLabels:
      app: my-apache          #匹配卷标
  replicas: 3                 #3副本
  template:                   #资源模板 POD定义
    metadata:
      labels:                 
        app: my-apache        #卷标
    spec:
      containers:              #容器信息
      - name: myos
        image: 192.168.1.100:5000/myos:httpd
        ports:
        - protocol: TCP
          containerPort: 80
      restartPolicy: Always
===============================
kubectl apply -f web-example.yaml
deployment.apps/apache-example created

kubectl get deployment.apps  #查看
NAME             READY   UP-TO-DATE   AVAILABLE   AGE
apache-example   3/3     3            3           105s

kubectl get pod   #
NAME                              READY   STATUS    RESTARTS   AGE
apache-example-7765fb6c7b-c6wcp   1/1     Running   0          13s
apache-example-7765fb6c7b-n45ph   1/1     Running   0          13s
apache-example-7765fb6c7b-xxt6t   1/1     Running   0          13s

集群调度
  • 扩容与缩减
#接上面web集群案例
kubectl scale deployment apache-example --replicas=1  #缩减到1
deployment.apps/apache-example scaled

kubectl get deployments.apps
NAME             READY   UP-TO-DATE   AVAILABLE   AGE
apache-example   1/1     1            1           9m47s   #缩减为1了
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值