linux系统kubernetes的deployment使用

deployment

deployment

概念

deployment ==》deploy    //可以简写

kubectl create deployment myweb --image=nginx --dry-run -o yaml > nginx.yaml  创建文件

kubectl expose deployment myweb --name=web-svc --port=80 --type=NodePort --target-port=80 --drt-run -o yaml > web.yaml     对公网暴露端口

kubectl apply -f web.yaml

kubectl get svc   //查看service服务
kubectl get ep    //查看后台挂载端口

如果Pod出现故障,对应的服务也会挂掉,所以Kubernetes提供了一个Deployment的概念 ,目的是让Kubernetes去管理一组Pod的副本,也就是副本集 ,这样就能够保证一定数量的副本一直可用,不会因为某一个Pod挂掉导致整个服务挂掉。

Deployment 还负责在 Pod 定义发生变化时,对每个副本进行滚动更新(Rolling Update)。

ini 复制代码
使用yaml创建Deployment
k8s deployment资源创建流程:
1. 用户通过 kubectl 创建 Deployment。
2. Deployment 创建 ReplicaSet。
3. ReplicaSet 创建 Pod。
ini 复制代码
对象的命名方式是:子对象的名字 = 父对象名字 + 随机字符串或数字

Deployment是一个定义及管理多副本应用(即多个副本 Pod)的新一代对象,与Replication Controller相比,它提供了更加完善的功能,使用起来更加简单方便。

示例

yaml 复制代码
例1:
apiVersion: apps/v1
kind: Deployment
metadata:
 name: nginx-deployment
spec:
 selector:
   matchLabels:
     app: nginx
 replicas: 2
 template:
   metadata:
     labels:
       app: nginx
   spec:
     containers:
     - name: nginx
       image: nginx:1.7.9
       ports:
       - containerPort: 80
yaml 复制代码
例2:在上面yaml的基础上添加了volume
[root@kub-k8s-master prome]# vim deployment.yaml
apiVersion: apps/v1  #注意版本号
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:  #属性,选择器
  matchLabels:
    app: nginx
replicas: 2  #管理的副本个数
template:  #模板属性
  metadata: #对pod的描述
    labels:
      app: nginx
  spec:
    volumes:   #定义共享卷
    - name: nginx-vol
      emptyDir: {}
    containers:
    - name: nginx
      image: daocloud.io/library/nginx
      ports:
      - containerPort: 80
      volumeMounts:  #定义挂载卷
      - mountPath: "/usr/share/nginx/html"
        name: nginx-vol

文件说明

ini 复制代码
创建Deployment:
将上述的YAML文件保存为deployment.yaml,然后创建Deployment:
kubectl apply -f deployment.yaml


检查Deployment的列表:启动之后需要创建时间比较长
kubectl get deployments


kubectl get pods -l app=nginx


在这里加上了一个 -l 参数,即获取所有匹配 app: nginx 标签的 Pod。需要注意的是,在命令行中,所有 key-value 格式的参数,都使用"="而非":"表示。

删除Deployment:
kubectl delete deployments nginx-deployment
或者
kubectl delete -f deployment.yaml

deployment可用字段

ini 复制代码
replicas: 1 # 声明副本数目
revisionHistoryLimit: 3 # 保留历史版本
selector: # 选择器

服务暴露

ini 复制代码
NodePort  对外暴露


ClusterIP  内部访问,内部访问可以跨命名空间

ClusterIP 
此类型会提供一个集群内部的虚拟IP(与Pod不在同一网段),以供集群内部的pod之间通信使用。ClusterIP也是Kubernetes service的默认类型。 



NodePort
外网client--->nodeIP+nodePort--->podIP+PodPort
为每个节点暴露一个端口,通过nodeip + nodeport可以访问这个服务,同时服务依然会有cluster类型的ip+port。内部通过clusterip方式访问,外部通过nodeport方式访问。



loadbalance
LoadBalancer在NodePort基础上,K8S可以请求底层云平台创建一个负载均衡器,将每个Node作为后端,进行服务分发。

Ingress
Ingress是一种HTTP方式的路由转发机制,为K8S服务配置HTTP负载均衡器,通常会将服务暴露给K8S群集外的客户端。
相关推荐
Zfox_15 分钟前
【Linux】进程信号全攻略(二)
linux·运维·c语言·c++
安於宿命19 分钟前
【Linux】简易版shell
linux·运维·服务器
黄小耶@31 分钟前
linux常见命令
linux·运维·服务器
叫我龙翔32 分钟前
【计网】实现reactor反应堆模型 --- 框架搭建
linux·运维·网络
古驿幽情34 分钟前
CentOS AppStream 8 手动更新 yum源
linux·运维·centos·yum
BillKu35 分钟前
Linux(CentOS)安装 Nginx
linux·运维·nginx·centos
BillKu39 分钟前
Linux(CentOS)yum update -y 事故
linux·运维·centos
a2663789644 分钟前
解决yum命令报错“Could not resolve host: mirrorlist.centos.org
linux·运维·centos
小沈熬夜秃头中୧⍤⃝1 小时前
【贪心算法】No.1---贪心算法(1)
算法·贪心算法
2739920292 小时前
Ubuntu20.04 安装build-essential问题
linux