前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Kubernetes之Pod, Replicaset, Deployment, Label, Service

Kubernetes之Pod, Replicaset, Deployment, Label, Service

作者头像
jwangkun
发布2021-12-23 16:20:34
2450
发布2021-12-23 16:20:34
举报
文章被收录于专栏:John Wong's Blog

Pod:

Pod是一组紧密关联的容器集合,它们共享PID、IPC、Network和UTS namespace,是Kubernetes调度的基本单位。Pod的设计理念是支持多个容器在一个Pod中共享网络和文件系统,可以通过进程间通信和文件共享这种简单高效的方式组合完成服务.

缺点: 不支持高并发, 高可用, 当Pod当机后无法自动恢复.

1.创建Pod

vi pod.yaml

代码语言:javascript
复制
apiVersion: v1
kind: Pod
metadata:
  name: demo
spec:
  containers:
  - image: httpd
    name: httpd
    imagePullPolicy: Always

kubectl create -f pod.yaml

2.查看Pod

kubectl get pods

代码语言:javascript
复制
NAME    READY     STATUS    RESTARTS   AGE
demo    1/1       Running      0       8d

kubectl describe pods

3.删除Pod

kubectl delete pod demo

Replicaset:

Replicaset在继承Pod的所有特性的同时, 它可以利用预先创建好的模板定义副本数量并自动控制, 通过改变Pod副本数量实现Pod的扩容和缩容

缺点: 无法修改template模板, 也就无法发布新的镜像版本

1.创建Replicaset

vi replicaset.yaml

代码语言:javascript
复制
apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: demo-rc
  labels:
    app: demo-rc
spec:
  replicas: 2
  selector:
    matchLabels:
      app: demo-rc
  template:
    metadata:
      labels:
        app: demo-rc
    spec:
      containers:
      - name: httpd
        image: httpd
        imagePullPolicy: Always

kubectl create -f replicaset.yaml

2.查看replicaset

kubectl get replicaset

代码语言:javascript
复制
NAME      READY     STATUS    RESTARTS   AGE
demo-rc    1/1       Running      0       8d

kubectl describe replicaset

3.删除replicaset

kubectl delete replicaset demo-rc

Deployment

Deployment在继承Pod和Replicaset的所有特性的同时, 它可以实现对template模板进行实时滚动更新并具备我们线上的Application life circle的特性.

1.创建Deployment

vi deployment.yaml

代码语言:javascript
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  name: httpd-deployment
  labels:
    app: httpd-deployment
spec:
  replicas: 2
  selector:
    matchLabels:
      app: httpd-demo
  template:
    metadata:
      labels:
        app: httpd-demo
    spec:
      containers:
      - name: httpd
        image: httpd
        imagePullPolicy: Always
        ports:
        - containerPort: 80
        env:
        - name: VERSION
          value: "v1"

kubectl create -f deployment.yaml

2.查看Deployment

kubectl get deployment

代码语言:javascript
复制
NAME               DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
httpd-deployment   2         2         2            2           8d

kubectl get pods -o wide

代码语言:javascript
复制
NAME                               READY     STATUS    RESTARTS   AGE       IP            NODE
httpd-deployment-956697567-8mqch   1/1       Running   0          8d        10.244.0.36   kube-master
httpd-deployment-956697567-wcbs6   1/1       Running   0          8d        10.244.0.37   kube-master

kubectl describe deployment

3.更新deployment

通过此命令可以呼出vi编辑器对模板进行编辑.

kubectl edit -f deployment.yaml

通过此命令使当前编辑结果生效.

kubectl apply -f deployment.yaml

再次查看可以看到老版本的deployment已经下架, 新版本的已经生效.

kubectl get deployment

代码语言:javascript
复制
NAME                          DESIRED   CURRENT   READY     AGE
httpd-deployment-6b98d94474   0         0         0         1m
httpd-deployment-956697567    2         2         2         7m

4.扩容与缩容

可以修改replicas的赋值对deployment进行扩容与缩容

kubectl scale deployment/httpd-deployment --replicas=1

5.删除deployment

kubectl delete deployment httpd-deployment

Lable

Label是attach到Pod的一对键/值对,用来传递用户定义的属性。比如,你可能创建了一个"tier"和“app”标签,通过Label(tier=frontend, app=myapp)来标记前端Pod容器,使用Label(tier=backend, app=myapp)标记后台Pod。然后可以使用Selectors选择带有特定Label的Pod,让具体某一个Pod或者Deployment去使用某一个Service实现特定的网络配置.

Service

Service是应用服务的抽象,通过labels为应用提供负载均衡和服务发现。匹配labels的Pod IP和端口列表组成endpoints,由kube-proxy负责将服务IP负载均衡到这些endpoints上。

每个Service都会自动分配一个cluster IP(仅在集群内部可访问的虚拟地址)和DNS名,其他容器可以通过该地址或DNS来访问服务,而不需要了解后端容器的运行。

1.更改NodePort限制

Kubernetes默认对外的NodePort限制范围为30000-32767, 这里如果要使用一些常用的端口(80, 8080, 443)需将这个范围放大.

vi /etc/kubernetes/manifests/kube-apiserver.yaml

在--service-cluster-ip-range与insecure-port间添加如下node port配置

代码语言:javascript
复制
...
- --service-cluster-ip-range=10.96.0.0/12
- --service-node-port-range=0-32767
- --insecure-port=0
....

重启服务

systemctl restart kubelet

2.创建Service

vi svc.yaml

代码语言:javascript
复制
apiVersion: v1
kind: Service
metadata:
  name: demo
spec:
  type: NodePort
  ports:
    - port: 80
      nodePort: 80
  selector:
    app: httpd-demo

kubectl create -f svc.yaml

Tip: 如果要对某一Pod或deployment添加对外访问端口, 这里service添加的selector的键值需与之相对应.

3.查看开放端口

kubectl get svc demo

代码语言:javascript
复制
NAME      TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)     AGE
demo      NodePort   10.100.96.157   <none>        80:80/TCP   1h

kubectl describe service demo

代码语言:javascript
复制
Name:                     demo
Namespace:                default
Labels:                   <none>
Annotations:              <none>
Selector:                 app=httpd-demo
Type:                     NodePort
IP:                       10.100.96.157
Port:                     <unset>  80/TCP
TargetPort:               80/TCP
NodePort:                 <unset>  80/TCP
Endpoints:                10.244.0.36:80,10.244.0.37:80
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>

下一篇: Harbor搭建私有Docker仓库→

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-10-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • vi pod.yaml
  • kubectl create -f pod.yaml
  • kubectl get pods
  • kubectl describe pods
  • kubectl delete pod demo
  • vi replicaset.yaml
  • kubectl create -f replicaset.yaml
  • kubectl get replicaset
  • kubectl describe replicaset
  • kubectl delete replicaset demo-rc
  • vi deployment.yaml
  • kubectl create -f deployment.yaml
  • kubectl get deployment
  • kubectl get pods -o wide
  • kubectl describe deployment
  • kubectl edit -f deployment.yaml
  • kubectl apply -f deployment.yaml
  • kubectl get deployment
  • kubectl scale deployment/httpd-deployment --replicas=1
  • kubectl delete deployment httpd-deployment
  • vi /etc/kubernetes/manifests/kube-apiserver.yaml
  • systemctl restart kubelet
  • vi svc.yaml
  • kubectl create -f svc.yaml
  • kubectl get svc demo
  • kubectl describe service demo
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档