Kubernetes

下面展示一些 内联代码片

// A code block
var foo = 'bar';
// An highlighted block
kubectl get nodes //列出集群节点
kubectl describe node 节点名称 //查看指定对象更多信息
kubectl describe node //查看所有对象信息
kubectl run 应用名称 --image=luksa/kubia --port=8080 --generator=run/vl //部署应用
//--image=luksa/kubia 指定要运行的容器镜像
//--port=8080 kubernetes 应用正在监昕 8080 端口 
//--generator=run/vl 通常并不会使用到它,它让 Kubemetes 创建 ReplicationController, 而不是Deployment。
kubectl expose pod名称 --type="NodePort" --port 8080 //将容器的8080端口映射到节点端口
kubectl expose rc pod名称 --type=LoadBalancer --name 服务名称 //创建服务暴露pod,外部可以访问 
kubectl cluster-info //集群信息
kubectl delete po pod1 pod2 //删除多个pod
kubectl delete po -l 标签名=标签值 //使用标签选择器删除pod
kubectl delete ns 命名空间  //通过删除命名空间删除pod
kubectl delete po --all  //删除当前命名空间中所有的pod
kubectl delete all --all  //删除命名空间中的几乎所有资源

滚动更新

kubectl set image pod名 kubernetes-bootcamp=新版镜像:<tag> #将应用使用的镜像版本升级
kubectl rollout undo pod名 #应用容器使用镜像版本回退

创建别名:在~/.bashrc或类似文件中添加

alias k=kubectl

重要概念

  • cluster:计算、存储和网络资源的集合

  • master:cluster的大脑,主要职责是调度,决定应用放在哪里运行

  • node:运行容器应用,node由master管理

  • pod:是k8s的最小工作单元,每个pod包含一个或多个容器,pod中的容器会作为一个整体被master调度到一个node上运行。pod中的所有容器使用同一个网络namespace,即相同的IP地址和port空间。

  • controller:k8s不直接创建pod,而是通过controller来管理pod。controller包括Deployment、Replicate、DaemonSet、StatefuleSet、Job等(kubectl get 控制器类型)
    1)Deployment:最常用,可以管理Pod的多个副本,并确保Pod按照期望的状态运行。
    2)ReplicaSet:实现了Pod的多副本管理。使用Deployment时会自动创建ReplicaSet,也就是说Deployment是通过ReplicaSet来管理Pod的多个副本的,我们通常不需要直接使用ReplicaSet。
    3)DaemonSet:用于每个Node最多只运行一个Pod副本的场景,通常用于运行daemon
    4)StatefuleSet:能够保证Pod的每个副本在整个生命周期中名称 是不变的
    5)Job:用于运行结束就删除的应用,而其他Controller中的Pod 通常是长期持续运行。

  • service:Service定义了外界访问一组特定Pod的方式。Service有自己的IP和端口,Service为Pod提供了负载均衡。

  • namespace:可以将一个物理的Cluster逻辑上划分成多个虚拟Cluster,每个Cluster就是一个Namespace。不同Namespace里的资源是完全隔离的。

    Kubernetes默认创建了两个Namespace,如图2-3所示。29图2-3

  • default:创建资源时如果不指定,将被放到这个Namespace中。

  • kube-system:Kubernetes自己创建的系统资源将放到这个 Namespace中。

pod

一个pod是一组紧密相关的容器,它们运行在同一个工作节点上,以及同一个Linux命名空间中。每一个pod都有自己的IP,并包含一个或多个容器,每个容器都运行一个应用进程。pod分布在不同的工作节点上。
在这里插入图片描述

kubectl get pods #列出pod
kubectl get pods -o wide #显示pod的IP和所运行的节点
kubectl describe pod #查看所有pod更多信息,和node类似
kubectl describe pod pod名称 #查看指定pod更多信息,和node类似

访问web应用

每个pod都有自己的ip地址,但是地址是集群内部的,不能从集群外部访问,为了让pod可以从外部访问,需要创建一个特殊的LoadBalancer类型服务,将创建一个外部的负载均衡,通过负载均衡的公共IP访问pod

  1. 创建一个服务对象
kubectl expose rc 应用名称 --type=LoadBalancer --name 服务名称 
  1. 列出服务
kubectl get services 或 kubectl get svc 
  1. 使用外部IP访问服务
curl 地址:端口号 

扩容

kubectl scale 控制器类型 应用名称 --replicas=3 #增加或减少pod副本数为3 
kubectl get 控制器类型 #查看扩容效果

扩容之后,应用的多个实例在运行,当请求服务时,服务作为负载均衡挡在多个pod前面,请求会随机切换不同的pod,无论服务后面是单个pod还是一组pod,这些pod的IP地址会发生改变,但是服务地址总是相同。

通过pod合理管理容器

  • 将多层应用分散到多个pod中
  • 基于扩缩容考虑而分割到多个pod中

YAML或JSON描述文件创建pod

kubectl get pod pod名称 -o yaml #获取指定pod的YAML描述文件
kubectl get pod pod名称 -o json #获取指定pod的YAML描述文件
kubectl explain pods #查看pod支持哪些属性
kubectl explain pod.spec #查看spec属性
kubectl create -f yaml文件名 #从YAML文件创建pod
kubectl logs pod名称 -c 容器名称 #查看日志
kubectl port-forward pod名称 本机端口:pod端口 #本地端口映射

一个基本的pod yaml描述文件

apiVersion:v1
kid:Pod 
metadata:
   name:pod名称
   labels:
      key:value  #标签键值对
spec:
   nodeSelector:
      标签名:value  #节点选择器要求k8s只将pod部署到包含改标签的节点上
   container:
   - image:创建容器所用镜像
     name:容器名称
     livenessProbe:  #一个http get存活探针
        httpGet:
           path: /  #http请求路径
           port:    #探针连接的网络端口
     ports:
     - containerPort:应用监听端口
       protocal:TCP

向pod发送请求
不通过service的情况下,可以通过配置本地端口转发到pod,就可以通过本地端口连接pod

kubectl port-forward pod名称 本地端口:pod端口

标签

标签是一种k8s特性,不仅可以组织pod,还可以组织所有其他的k8s资源。标签可以附加到资源的任意键值对,只要标签的key唯一,一个资源可以拥有多个标签。创建pod时指定标签。

kubectl get pods --show-labels #查看所有pod的标签
kubectl get pods -L 标签名,标签名 #查看pod指定标签值
kubectl get pods -l 标签名=标签内容 #通过标签名筛选pod
#标签名 in (value1,value2,..)
#标签名 notin (value1,value2,..)
#标签名 != 标签值
#'!标签名' 不包含该标签
kubectl get pods -l 标签名 #筛选包含标签名的pod
kubectl label pods pod名 标签名=标签内容 #添加标签
kubectl label pods pod名 标签名=标签内容 --overwrite #修改指定标签
kubectl label nodes 节点名 标签名=标签内容 #节点添加标签
kubectl get nodes -l 标签名=标签内容 #筛选包含指定标签且值相等

注解

  • 注解也是键值对,本质与标签类似,但不是为了保存标识信息而存在
  • 注解可以容纳更多的信息,并且主要用于工具使用
kubectl annotate pod pod名称 注解名=注解值 #添加注解

命名空间

kubectl get ns #查看命名空间
kubectl get po --namespace 命名空间 #查看属于该命名空间的pod
kubectl create -f yaml文件名 -n 命名空间名 #创建资源时指定命名空间

创建命名空间方法

  1. yaml文件
#定义命名空间yaml文件
apiVersion:v1
kind:Namespace
metadata:
  name:命名空间名称
#创建命名空间
kubeclt create -f 命名空间yaml文件名 
  1. 命令直接创建
kubectl create namespace 命名空间名称
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值