【devops】十、Kubernetes编排工具(中)

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
.cn 域名,1个 12个月
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 【devops】十、Kubernetes编排工具(中)

10.4 Kubernetes操作

首先我们要了解Kubernetes在运行我们的资源时,关联到了哪些内容

  • 资源的构建方式:
  • 采用kubectl的命令方式
  • yaml文件方式


10.4.1 Namespace
  • 命名空间:主要是为了对Kubernetes中运行的资源进行过隔离, 但是网络是互通的,类似Docker的容器,可以将多个资源配置到一个NameSpace中。而NameSpace可以对不同环境进行资源隔离,默认情况下Kubernetes提供了default命名空间,在构建资源时,如果不指定资源,默认采用default资源。

命令方式:

# 查看现有的全部命名空间
kubectl get ns
# 创建命名空间
kubectl create ns 命名空间名称
# 删除现有命名空间, 并且会删除空间下的全部资源
kubectl delete ns 命名空间名称


yaml文件方式:(构建资源时,设置命名空间)

apiVersion: v1
kind: Namespace
metadata:
  name: test


10.4.2 Pod
  • Pod:Kubernetes运行的一组容器,Pod是Kubernetes的最小单位,但是对于Docker而然,Pod中会运行多个Docker容器
  • 命令方式:
# 查看所有命名空间下运行的pod,不加-A表示default命名空间下
kubectl get pods -A
# 查看指定Namespace下的Pod
kubectl get pod [-n 命名空间]    #(默认default)
# 创建Pod
kubectl run pod名称 --image=镜像名称
# 查看Pod详细信息
kubectl describe pod pod名称
# 删除pod
kubectl delete pod pod名称 [-n 命名空间]  #(默认default)
# 查看pod输出的日志
kubectl logs -f pod名称
# 进pod容器内部
kubectl exec -it pod名称 -- bash
# 查看kubernetes给Pod分配的ip信息,并且通过ip和容器的端口,可以直接访问
kubectl get pod -owide


yaml方式(推荐)

**apiVersion: v1
kind: Pod
metadata:
  labels:
    run: 运行的pod名称
  name: pod名称
  namespace: 命名空间
spec:
  containers:
  - image: 镜像名称
    name: 容器名称
# 启动Pod:kubectl apply -f yaml文件名称
# 删除Pod:kubectl delete -f yaml文件名称**


Pod中运行多个容器

**apiVersion: v1
kind: Pod
metadata:
  labels:
    run: 运行的pod名称
  name: pod名称
  namespace: 命名空间
spec:
  containers:
  - image: 镜像名称
    name: 容器名称
  - image: 镜像名称
    name: 容器名称
…………**


# 部署一个nginx-tomcat的pod,一个pod中可以运行多个容器
apiVersion: v1
kind: Pod
metadata:
  name: nginx-tomcat
  namespace: test
spec:
  containers:
  - image: nginx
    name: nginx
  - image: tomcat
    name: tomcat 

启动后可以查看到

Kuboard效果:

006a948256854d9cbe57bcf27ea8cdb9.png

10.4.3 Deployment

部署时,可以通过Deployment管理和编排Pod

Deployment部署实现

命令方式:

# 基于Deployment启动容器
kubectl create deployment deployment名称 --image=镜像名称
# ex:在test命名空间下创建一个deployment类型的pod
kubectl create deployment deploy-nginx --image=nginx -n test
# 用deployment启动的容器会在被删除后自动再次创建,达到故障漂移的效果
# 需要使用deploy的方式删除deploy
# 查看现在的deployment
kubectl get deployment
# 删除deployment
kubectl delete deployment deployment名称
# ex:删除test命名空间下的pod:deploy-nginx
kubectl delete pod deploy-nginx --image=nginx -n test
# 基于Deployment启动容器并设置Pod副本数
kubectl create deployment deployment名称 --image=镜像名称 --replicas 集群个数


配置文件方式:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  namespace: test
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80


kubectl apply -f deployment-nginx.yml

正常使用kubectl运行yaml即可

弹性伸缩功能

# 基于scale实现弹性伸缩
kubectl scale deploy/Deployment名称 --replicas 集群个数
# 或者修改yaml文件
kubectl edit deploy Deployment名称


图形化页面修改:

3b3335b1f2454c85aeae17c7a5f6bf3a.png

灰度发布

Deploy可以在部署新版本数据时,成功启动一个pod,才会下线一个老版本的Pod

kubectl set image deployment/Deployment名称 容器名=镜像:版本


10.4.4 Service

可以将多个Pod对外暴露一个Service,让客户端可以通过Service访问到这一组Pod,并且可以实现负载均衡


ClusterIP方式:

ClusterIP是集群内部Pod之间的访问方式

命令实现效果:

# 通过生成service映射一个Deployment下的所有pod中的某一个端口的容器
kubectl expose deployment Deployment名称 --port=Service端口号 --target-port=Pod内容器端口


之后通过kubectl get service查看Service提供的ip,即可访问

b4c9907ff9da4110afe3cdc3bc26fca8.png

也可以通过Deployment名称.namespace名称.svc作为域名访问

在服务容器内执行:

e1e9795077024872bff2e23679a5bd88.png

NodePort方式:

ClusterIP的方式只能在Pod内部实现访问,但是一般需要对外暴露网关,所以需要NodePort的方式Pod外暴露访问

命令实现方式:

# 通过生成service映射一个Deployment下的所有pod中的某一个端口的容器
kubectl expose deployment Deployment名称 --port=Service端口号 --target-port=Pod内容器端口 --type=NodePort


查看Service效果:

cf635d85e0b34abcacb692b688b0cda2.png

bd663c32560844199b334a2adafd65a5.png

Service也可以通过yaml文件实现:

apiVersion: v1
kind: Service
metadata:
  labels
    app: nginx
  name: nginx
  spec:
    selector:
      app: nginx
    ports:
    - port: 8888
     protocol: TCP
     targetPort: 80


通过apply启动就也可以创建Service

测试效果Deployment部署,通过Service对外暴露端口

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  namespace: test
  labels:
    app: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-deployment
  namespace: test
  labels:
    app: nginx-deployment
spec:
  selector:
    app: nginx
  ports:
  - port: 8888
    protocol: TCP
    targetPort: 80
  type: NodePort


可以查看到暴露的信息

da26f2e830a24d59b29bca673536b142.png

10.4.5 Ingress

Kubernetes推荐将Ingress作为所有Service的入口,提供统一的入口,避免多个服务之间需要记录大量的IP或者域名,毕竟IP可能改变,服务太多域名记录不方便。

Ingress底层其实就是一个Nginx, 可以在Kuboard上直接点击安装:

9eab7cd6366748769a24f8412e8f85ce.png

85707923ea614391afd697a1d29f9b19.png

因为副本数默认为1,但是k8s整体集群就2个节点,所以显示下面即为安装成功

d996be6d766a494487b719b014698422.png

可以将Ingress接收到的请求转发到不同的Service中。

推荐使用yaml文件方式

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: nginx-ingress
  namespace: test
spec:
  ingressClassName: ingress
  rules:
  - host: nginx.ingress.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: nginx-deployment
            port:
              number: 8888


启动时问题:

3d15690537b04d088454fcfd5137051f.png

Kuboard安装的Ingress有admission的校验配置,需要先删除配置再启动

找到指定的ingress的校验信息,删除即可

7e0c8762f534492d873d68658ef781f2.png

# 查看校验webhook的配置
kubectl get -A ValidatingWebhookConfiguration
# 删除指定的校验
kubectl delete ValidatingWebhookConfiguration ingress-nginx-admission-my-ingress-controller

配置本地hosts文件:

5a4e0054fa754cfaae21f046334ac373.png

接下来就可以访问在Service中暴露的Nginx信息

注意:必须是域名+IP才能访问,只用域名访问会报错。

c500c9494e4e4dcfaba332bc014b66bf.png

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
2月前
|
Kubernetes Shell Linux
K8S 实用工具之一 - 如何合并多个 kubeconfig?
K8S 实用工具之一 - 如何合并多个 kubeconfig?
|
2月前
|
存储 Kubernetes C++
Kubernetes VS Docker Swarm:哪个容器编排工具更适合你?
当今,容器化技术已成为IT领域的热门话题,而容器编排工具是实现容器自动化部署和管理的关键。本文将比较两种主流的容器编排工具Kubernetes和Docker Swarm,并探讨它们的优缺点,以帮助你选择最适合自己的工具。
|
2月前
|
Kubernetes 调度 C++
Kubernetes vs Docker Swarm:容器编排工具的比较与选择
在当今云计算时代,容器技术的应用越来越广泛。而在众多容器编排工具中,Kubernetes和Docker Swarm是两个备受关注的竞争者。本文将深入比较这两个工具的特点、优势和劣势,帮助读者更好地选择适合自己的容器编排解决方案。
|
2月前
|
存储 Kubernetes C++
【专栏】Kubernetes VS Docker Swarm了解两者特点,助力选取合适容器编排工具
【4月更文挑战第27天】对比Kubernetes和Docker Swarm:K8s在可扩展性和自动化方面出色,有强大社区支持;Swarm以简易用著称,适合初学者。选择取决于项目需求、团队技能和预期收益。高度复杂项目推荐Kubernetes,快速上手小项目则选Docker Swarm。了解两者特点,助力选取合适容器编排工具。
|
17天前
|
运维 Devops 测试技术
DevOps:文化、工具与实践的深度融合
【6月更文挑战第21天】DevOps融合文化、工具与实践,促进开发与运维协作,加速软件交付。核心包括共享文化、自动化工具(如Git、Jenkins)与流程优化(敏捷、自动化、微服务)。DevOps助力团队协作,提高效率,降低运维成本,驱动企业持续创新与成长。
|
3天前
|
Prometheus 运维 监控
DevOps实践中的监控策略与工具应用
在当今快速发展的软件交付领域,DevOps实践已成为提升效率、确保质量的关键因素。本文深入探讨了在DevOps流程中实施有效监控的必要性,分析了监控数据对于优化运维工作的价值。文章首先概述了监控在DevOps中的作用,随后详细介绍了一系列现代监控工具,并通过实际案例展示了如何整合这些工具以构建强大的监控系统。最后,文中讨论了监控策略的最佳实践,旨在帮助读者构建一个全面、自动化和高效的监控体系。
|
27天前
|
运维 监控 Devops
云效DevOps:不仅仅是工具,更是思维方式的转变
【6月更文挑战第11天】云效DevOps是软件行业的 game changer,超越技术工具层面,推动协作、自动化和持续改进的思维转型。它连接开发、测试、运维,强化团队协作,通过自动化提升效率和准确性,减少人为错误。示例展示了自动化构建过程,强调每次迭代都是改进机会,促进项目持续优化和竞争力提升。
|
10天前
|
Kubernetes 监控 Java
阿里云云效产品使用问题之进行Kubernetes分批发布时应用名被更改,是什么导致的
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
2月前
|
Kubernetes 数据安全/隐私保护 Docker
kubeadm 工具实验 k8s一键安装
kubeadm 工具实验 k8s一键安装
|
2月前
|
Kubernetes 开发者 Docker
K8S 实用工具之五 -kompose
K8S 实用工具之五 -kompose