K8S--实战

一、服务部署

  新增配置yaml配置文件

# 创建一个service资源对象
# kubectl expose deployment xxName –port=80 –target-port=80    k8s指令模式创建一个service
# k8s部署yaml方式
apiVersion: v1
kind: Service
metadata:
  name: nginx
  namespace: default
spec:
  selector:
    app: nginx
  ports:
  - port: 80
    targetPort: 80
---

# 部署deployment对象,k8s创建3个资源对象:Deployment,ReplicaSet,POD
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.16
        ports:
        - containerPort: 80

      

  执行配置文件,生成deployment和service

kubectl apply -f ingres.yaml

   执行后查看deployment、service、rs、pod的情况(注意:这一步一般时间比较久,需要等一会)

      

 二、服务扩容

  扩容命令

kubectl scale deployment nginx --replicas=3

      

  从上图可以看到,执行扩容后,直接变为3个副本。 

三、服务自愈

  可以做一个模拟,直接删除一个或多个pod,K8S会自动重新创建指定数量的副本,保证pod数量与副本数量一致

kubectl delete pod nginx-6fcfdd4c87-5rwdz

      

四、负载均衡及外网访问

  从get service图片的输出中可以看到,nginx的type为ClusterIp,这种类型的service只能在集群内部访问,而不能在外部直接访问,那么就需要修改类型为NodePort,修改命令:

kubectl edit svc nginx

      

   更改完毕之后,重新查看service,发现type已经变为NodePort,且port也变更了,前面的80是容器内的端口,后面的31758是对外开放的端口,也就是宿主机的端口。

      

   此时,使用宿主机的ip + 31758访问,即可访问nginx

      

五、服务DNS

  Dns可以根据服务名称寻址响应的服务的ip地址;从而可以通过服务名称和对应的服务进行通信; 在微服务架构中服务部署非常有用;

  DNS: 域名解析服务器,可以根据hostname解析出服务对应ip; 可以根据服务名称发现服务。

  进入容器内部,ping服务名即可演示:

  首先创建两个服务,分别为nginx和nginx-lcl

      

   进入nginx的一个容器:kubectl exec -it pod名称 sh

kubectl exec -it nginx-79fb9cc9bb-qhqm7 sh

  然后再容器中ping另一个服务的服务名

      

   可以看到直接ping的地址就是10.109.171.91,对应的就是上面图中nginx-lcl的IP。

  说明:如果在容器内不能使用ping命令,执行下面这两个命令即可。

apt-get update
apt install iputils-ping

  在实际生产中,这个用场景主要是:不需要借助注册中心,直接使用服务名进行访问,也就是不需要通过类似Spring Cloud的注册中心和负载均衡来处理,在代码中直接调用服务名,让K8S来做负载均衡。

六、滚动更新

  项目开发时候,需求不断迭代,变更;发布新的版本,使用新的镜像版本进行部署;在K8S中 可以指定新的版本,一键式发布项目;更新项目版本。

kubectl set image deployment/nginx-lcl nginx-lcl=nginx:v2

  对命令做个解释,就是需要重置一下deployment中镜像的地址,上面的命令中,新的镜像地址为nginx:v2,这里可以是镜像仓库中的一个镜像地址。

 

posted @ 2021-07-30 22:44  李聪龙  阅读(535)  评论(0编辑  收藏  举报