第一章 初入k8s--Kubernetes资源介绍

1. Kubernetes资源介绍

1.1 pod

容器都是由镜像启动的。但在容器外面会通过Pod将容器包裹起来,一个pod里面可以运行一个或者多个容器,这个pod的特征包括

· Pod里的所有容器都会调度到同一个节点上运行

· Pod中的所有容器会共享同一网络,它们有一个唯一的IP,叫PodIP

· Pod中还有一个特殊的容器叫Pause,他会优先启动然后进行IP分配,而后将其他容器都link到该容器上,实现网络共享

0

 网络通讯模式的方式:   

1、同一个Pod内的多个容器之间:localhost   

2、各Pod之间的通讯:Overlay Network   

3、Pod与Service之间的通讯:各节点的Iptables规则

1.2 Deployment

在Pod的上一层就是ReplicaSet控制器,他主要负责管理Pod的副本数,但通常我们并不直接使用ReplicaSet,而是使用比ReplicaSet更高一级的Deployment。由Deployment管理ReplicaSet,它会自动帮我们创建和销毁RS。有了Deployment就可以实现应用的滚动更新。

0

1.3 Service

Service,是Kubernetes用来实现Pod负载均衡的一个服务;要想实现Pod的负载均衡,首先需要通过labels为Pod打上特定的标签,而后创建Service时使用Selector选择对应的标签,最终通过节点的Kube-proxy来完成负载均衡的规则创建。

0

1.4 Namespace

在 Kubernetes中,名字空间提供一种机制,将同一集群中的资源划分为互为隔离的组。同一名字空间内的资源名称要唯一,但跨名字空间时没有这个要求

· 对资源对象进行隔离:比如: Pod、Deployment、service将其划分为相互隔离的组

· 对资源配额进行隔离:CPU,Memory,限制某个NS的可以使用的CPU和内存

0namespace仅能隔离带有命名空间的资源,而不带命名空间的资源不支持隔离,可以通过 kubectl api-resources 查看哪些资源属于空降级别,哪些不属于空间级别。

namespace隔离其实是名称的隔离,并不是物理的隔离,所以重点在于资源隔离。

2.Kubernetes资源实践

通过部署应⽤来理解Kubernetes中的资源

一个yaml文件metadata是作为一种资源的开始,template是pod资源的模板,deployment 通过selector(标签选择器)去管理具有相同标签的pod

0

2.1 部署应⽤

[root@k8s-master deploy]# more 01-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: app-deploy
  namespace: default
spec:
  replicas: 3      #期望deploy部署的pod的副本数量是3
  selector:
    matchLabels:
      run: app     #selector标签选择器选择带有run=app
  template:        #创建pod的模板
    metadata:
      labels:
        run: app    #给Pod定义一个标签
    spec:
      containers:
      - name: app-container  #容器的名字
        image: nginx         #容器使用的镜像
        ports:
        - containerPort: 80   #容器对外的端口

2.2 访问应⽤

[root@k8s-master deploy]# more 02-service.yaml
apiVersion: v1
kind: Service
metadata:
  name: app-service       #这个名称会被CoreDns解析到
  namespace: default
spec:
  selector:              #Service后端是那些pod,通过标签选择
    run: app
  ports:
  - name: http
    port: 8080          #负载均衡的端口 user————》serviceIP+port--》podIP+port
    targetPort: 80      #容器对外的端口



[root@k8s-master deploy]# kubectl describe service app-service
Name:              app-service
Namespace:         default
Labels:            <none>
Annotations:       <none>
Selector:          run=app
Type:              ClusterIP
IP Family Policy:  SingleStack
IP Families:       IPv4
IP:                10.105.180.88
IPs:               10.105.180.88
Port:              http  8080/TCP
TargetPort:        80/TCP
Endpoints:         10.244.107.193:80,10.244.169.138:80,10.244.36.65:80
Session Affinity:  None
Events:            <none>

2.3 Scale应⽤

#做副本数操作
 kubectl scale  deployment  app-deploy --replicas=5  #设置能5个
 kubectl scale  deployment  app-deploy --replicas=2  #设置能2个

2.4 滚动更新以及回退

# 语法:kubectl set image 工作负载方式/Pod名称 镜像名称=需要调整的镜像 --record
# --record 用作记录滚动更新的信息, 后面方便版本回退
  kubectl  set image deployment/app-deploy *=nginx:1.16.1 --record
  kubectl  set image deployment/app-deploy http=nginx:1.16.1 --record
 [root@k8s-master deploy]# kubectl get rs
NAME                    DESIRED   CURRENT   READY   AGE
app-deploy-5c4b7ddcbf   0         0         0       106m
app-deploy-74bfbbd      3         3         3       7m55s
滚动更新:命令方式:1、需要修改镜像的版本;
kubectl set image deployment app-deploy *=demoapp:v1.1 --record=true
2、回退可以执行命令在部署一次,也可以直接回退到之前历史版本上;
kubectl set image deployment app-deploy *=demoapp:v1.0 --record=true		# 重新部署旧版本也算回退了一次,可能会产生新的RS;				
1、查看历史的部署记录,看需要回退到那个版本上;
kubectl rollout history deployment app-deploy
2、通过命令直接回退
kubectl rollout undo deployment app-deploy --to-revision=Number
yaml:
更新: 直接修改镜像版本;
回退: 直接修改镜像版本;

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值