K8S入门以及应用场景

一、容器是什么?

容器镜像是轻量的、可执行的独立软件包 ,包含软件运行所需的所有内容:代码、运行时环境、系统工具、系统库和设置,赋予了软件独立性,使其免受外在环境差异(例如,开发和预演环境的差异)的影响,从而有助于减少团队间在相同基础设施上运行不同软件时的冲突。

一句话概括容器:容器就是将软件打包成标准化单元,以用于开发、交付和部署

从虚拟化层面来看,传统虚拟化技术是对硬件资源的虚拟,容器技术则是对进程的虚拟,从而可提供更轻量级的虚拟化,实现进程和资源的隔离。

二、docker

docker就是一种轻量化的虚拟化容器技术,它的目标是应用组件级别的“一次封装,到处运行”。这里的应用组件,既可以是一个Web应用,也可以是一套数据库服务,甚至是一个操作系统。将应用运行在Docker 容器上,可以实现跨平台,跨服务器,只需一次配置准备好相关的应用环境,即可实现到处运行,保证研发和生产环境的一致性,解决了应用和运行环境的兼容性问题,从而极大提升了部署效率,减少故障的可能性。

  以docker发布java服务为例

(1)编写Dockerfile文件

     FROM java:8

     ADD demo-0.0.1-SNAPSHOT.jar app.jar

     EXPOSE 9527

     ENTRYPOINT ["java", "-jar", "app.jar", "--server.port=9527"]

(2)生成镜像

    将jar包和Dockerfile放在同一文件夹下,执行命令docker build -t mydemo .

(2)运行容器(实例化)

docker run -p 9527:9527 镜像名

(3)上传镜像到镜像仓库(统一管理方便获取)

docker tag mydemo registry.cn-shanghai.aliyuncs.com/xxx/mydemo:v1

docker push registry.cn-shanghai.aliyuncs.com/xxx/mydemo:v1

常用命令:

docker images                          (查看镜像)

docker rmi 镜像名                    (删除镜像)

docker ps                                 (查看容器)

docker logs 容器名                   (查看容器日志)

docker exec -it 容器名  bash    (进入容器)

docker stop 容器名                  (关闭容器)

docker start 容器名                  (启动容器)

docker rm 容器名                     (删除容器)

随着服务的增长使用docker会有什么问题?

  1. 容器的手动操作成本变大,启动,停止,扩容变的困难。
  2. 服务数量的增长导致服务器数量的增长,资源分配复杂。

三、k8s

Kubernetes是容器集群管理系统,是一个开源的平台,具有完备的集群管理能力,包括多层次的安全防护和准入机制、多租户应用支撑能力、透明的服务注册和服务发现机制、内建智能负载均衡器、强大的故障发现和自我修复能力、服务滚动升级和在线扩容能力可扩展的资源自动调度机制,以及多粒度的资源配额管理能力。

(1)创建pod

pod创建一般通过资源控制器完成,k8s提供了一系列的控制器,比如ReplicaSet、Deployment和DaemonSet等,这里主要讲下Deployment的使用。

 

①创建yml文件,内容指定容器镜像,副本数等主要信息。

apiVersion: apps/v1

kind: Deployment

metadata:

  name: mydemo

spec:

  selector:

    matchLabels:

      app: mydemo

  replicas: 2

  template:

    metadata:

      labels:

        app: mydemo

    spec:

      containers:

      - name: mydemo

        image: registry.cn-shanghai.aliyuncs.com/xxx/mydemo:v1

        ports:

        - containerPort: 9527

②执行命令(ljw-demo 是自定义命名空间)

kubectl apply -f mydemo.yml   通过yml配置创建pod

kubectl delete -f  mydemo.yml

kubectl get pod  -n ljw-demo   查看特定命名空间下的pod

kubectl describe pod mydemo-bd55cd8dd-c7wkq -n ljw-demo  查看某个pod的详细情况

kubectl delete pod mydemo-bd55cd8dd-c7wkq -n ljw-demo  删除某个pod

(2)创建service

pod往往不会单独存在,需要搭配对应的service使用,service为一组pod提供对外服务的能力。

 

①ClusterIP类型

apiVersion: v1

kind: Service

metadata:

  name: mydemo-service

  namespace: ljw-demo

  labels:

    app: mydemo

spec:  

  ports:

    - port: 9527

      targetPort: 9527

      protocol: TCP

  selector:

    app: mydemo

②NodePort类型

可以在外部通过nodeip:nodePort访问服务,缺点是在各个节点都开启了端口,不安全且不好管理,并且只能做四层代理,现实中往往需要七层代理。

apiVersion: v1

kind: Service

metadata:

  name: mydemo-svc

  namespace: ljw-demo

spec:

  type: NodePort        // 配置为NodePort,外部可以访问

  ports:

  - port: 9527              // 容器间,服务调用的端口

    targetPort: 9527     // 容器暴露的端口,与Dockerfile暴露端口保持一致

    nodePort: 39528  // NodePort,外部访问的端口

  selector:

    app: mydemo

创建命令

kubectl apply -f mydemo-svc.yml   通过yml配置创建pod

kubectl delete -f  mydemo.yml

kubectl get svc -n ljw-demo           查看命令空间下的所有service

kubectl describe svc  服务名 -n ljw-demo

service的NodePort存在的不足

1、一个端口只能一个服务使用,端口需要提前规划

2、只支持4层网络协议

四层(传输层):基于ip和端口转发的

七层(应用层):基于应用层协议转发,例如http、可以根据域名、url等转发

(3)ingress controller和ingress

ingress controller可以简单理解成nginx服务,ingress可以理解为nginx的一段配置,一个ingress对应nginx里的一个server配置文件。

 

编写yml文件

apiVersion: extensions/v1beta1

kind: Ingress

metadata:

  name: mydemo-ing

  namespace: ljw-demo

  annotations:

    kubernetes.io/ingress.class: "nginx"

spec:

  backend:

    serviceName: mydemo-service

    servicePort: 9527

  rules:

  - host: demo.hundun.com

    http:

      paths:

      - path: /

        backend:

          serviceName: mydemo-service

          servicePort: 9527

四、argocd

Argo CD 是一个为 Kubernetes 而生的,遵循声明式 GitOps 理念的持续部署(CD)工具,它的配置和使用非常简单,并且自带一个简单易用的 Dashboard 页面,并且支持多种配置管理/模板工具(例如 Kustomize、Helm、Ksonnet、Jsonnet、plain-YAML)。

Argo CD 被实现为一个 Kubernetes 控制器,它持续监控正在运行的应用程序并将当前的实时状态与所需的目标状态(例如 Git 仓库中的配置)进行比较,在 Git 仓库更改时自动同步和部署应用程序。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DD0324

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值