1.项⽬迁移到K8S平台是怎样的流程
制作镜像:
使⽤dockerfile制作docker 镜像镜像分为
基础镜像:centos,ubuntu服务镜像:openjdk,nginx,mysql
项⽬镜像:项⽬代码打包在服务镜像⾥,最终交付物java或者go的应⽤需要编译,php的可以不⽤编译。
控制器管理pod
Deployment:⽆状态部署,例如Web,微服务,APIStatefulSet:有状态部署,例如数据库,ZK,ETCD
DaemonSet:守护进程部署,例如监控Agent、⽇志AgentJob & CronJob:批处理,例如数据库备份,邮件通知
pod数据持久化:
容器部署过程中⼀般有以下三种数据:
启动时需要的初始数据,可以是配置⽂件
启动过程中产⽣的临时数据,该临时数据需要多个容器间共享启动过程中产⽣的业务数据
暴露应⽤:
使⽤Service ClusterIP类型暴露集群内部应⽤访问。
Service定义了Pod的逻辑集合和访问这个集合的策略
Service引⼊为了解决Pod的动态变化,提供服务发现和负载均衡使⽤CoreDNS解析Service名称
对外发布应⽤:
使⽤Ingress对外暴露你的应⽤。
通过Service关联Pod基于域名访问
通过Ingress Controller实现Pod的负载均衡⽀持TCP/UDP 4层和HTTP 7层(Nginx)
⽇志与监控
使⽤Prometheus监控集群中资源的状态使⽤ELK来收集应⽤的⽇志
2.传统部署和k8s部署的区别
区别:
原先的应⽤包变成了存放在镜像仓库中的镜像
部署从原先ansible部署,变成k8s使⽤控制器部署,部署的节点直接是由物理机变成部署在pod内暴露服务由原先的⾃建负载均衡nginx,haproxy等 变成通过k8s 的service,ingress来暴露服务
3.⼿⼯模拟k8s发布java应⽤
测试java-demo
unzip java-demo.zip && cd java-demo
安装jdk
yum install -y java-1.8.0-openjdk
安装maven
yum install maven -y
编译代码
db⽬录 ,数据库表的初始化sqlpom.xml 项⽬依赖的jar包说明⽂件src 源代码⽬录
由于maven默认使⽤的国外的maven源 所以改成国内阿⾥云的源这样下载依赖包会很快/etc/maven/settings.xml在159⾏加⼊
在 构建war包 mvn clean package -Dmaven.test.skip clean package 会删掉之前存在构建好的⽂件⽬录maven.test.skip 表⽰忽略测试 编写Dockerfile 配置对私有仓库的可信任,并配置默认的镜像仓库为阿⾥云仓库/etc/docker/daemon.json { \"registry-mirrors\": [\"https://yyk0qnca.mirror.aliyuncs.com\"], \"insecure-registries\": [\"192.168.31.70\"]} Dockerfile FROM 192.168.31.70/library/tomcat:v1RUN rm -rf /usr/local/tomcat/webapps/* COPY target/*.war /usr/local/tomcat/webapps/ROOT.war 1.从镜像仓库拉取旧版本的应⽤镜像,其中library仓库是个公共的仓库所以不需要登录 2.删除镜像中原本的war包 3.将本地构建好的war包复制到镜像的war包⽬录,并命名为ROOT.war执⾏构建 docker build -t java-demo:v1 . 本地运⾏镜像 docker run -d java-demo:v1 验证应⽤是否发布成功 docker inspect -f='{{.NetworkSettings.IPAddress}}' f07c858226 #获取容器的ip 创建⼀个 demo的私有仓库 推送镜像到私有仓库 docker login 192.168.31.70 --username=admin docker tag 182f52a26eb0 192.168.31.70/demo/java-demo:v1docker push 192.168.31.70/demo/java-demo:v1 创建私有仓库的认证secret 由于demo仓库设置的是私有类型所以pull镜像需要登录认证。 kubectl create secret docker-registry docker-regsitry-auth --docker-username=admin --docker-password=Harbor1345 --docker-server=192.168.31.70 使⽤deployment发布应⽤ apiVersion: apps/v1kind: Deploymentmetadata: name: java-demospec: replicas: 3 selector: matchLabels: project: www app: java-demo template: metadata: labels: project: www app: java-demo spec: imagePullSecrets: - name: \"docker-regsitry-auth\" containers: - image: 192.168.31.70/demo/java-demo:v1 name: java-demo imagePullPolicy: Always ports: - containerPort: 8080 name: web protocol: TCP resources: requests: cpu: 0.5 memory: 0.3Gi limits: cpu: 1 memory: 0.5Gi livenessProbe: httpGet: path: / port: 8080 initialDelaySeconds: 60 timeoutSeconds: 20 readinessProbe: httpGet: path: / port: 8080 initialDelaySeconds: 60 timeoutSeconds: 20 创建service暴露服务 apiVersion: v1kind: Servicemetadata: labels: app: java-demo name: java-demospec: ports: - port: 80 protocol: TCP targetPort: 8080 nodePort: 30018 selector: app: java-demo type: NodePort 可以通过 任意节点的ip:30018 访问应⽤ 使⽤ingress对外发布服务 apiVersion: extensions/v1beta1kind: Ingressmetadata: name: java-demospec: rules: - host: java.ctnrs.com http: paths: - path: / backend: serviceName: java-demo servicePort: 80 编辑hosts⽂件 然后访问java.ctnrs.com 模拟更新应⽤ 在harbor节点 安装mysql数据库 yum install -y mariadb-serversystemctl start mariadb mysqladmin -uroot password \"123456\" 设置密码123456 编辑 java-demo/src/main/resources/application.yml将连接数据库的地址换成 harbor节点的地址 创建demo⽤户并授权 MariaDB [test]> grant all on test.* to 'demo'@'192.168.31.%' identified by '123.com';MariaDB [test]> grant all on test.* to 'demo'@'localhost' identified by '123.com'; 将修改后的配置重新编译成war包 mvn clean package -Dmaven.skip.testdocker build -t java-demo:v2 . docker tag java-demo:v2 192.168.31.70/demo/java-demo:v2docker push 192.168.31.70/demo/java-demo:v2 将deployment.yaml 中镜像版本v1改成v2- image: 192.168.31.70/demo/java-demo:v2重新应⽤配置后会触发滚动更新kubectl apply -f deployment.yaml 再次访问应⽤就是升级后(更改过配置)的应⽤ 回滚应⽤ kubectl rollout history deployment/java-demo #查看应⽤历史版本kubectl rollout undo deployment/java-demo #回滚到之前的版本 kubectl rollout undo deployment/java-demo --to-revision=1 #回到指定的历史版本kubectl rollout status deploy/java-demo #查看发布情况 4.⼿⼯模拟k8s发布php应⽤ 测试php-demo unzip php-demo.zip && cd php-demo 构建推送镜像 FROM registry.cn-hangzhou.aliyuncs.com/benjamin-public/nginx-php:latestMAINTAINER BenjaminYangADD . /usr/local/nginx/html docker build -t 192.168.31.70/demo/php-demo:v1 . docker push 192.168.31.70/demo/php-demo:v1 #demo是私有仓库需要登录 通过deployment发布应⽤ deployment.yaml apiVersion: apps/v1kind: Deploymentmetadata: name: php-demo namespace: testspec: replicas: 3 selector: matchLabels: project: www app: php-demo template: metadata: labels: project: www app: php-demo spec: imagePullSecrets: - name: docker-regsitry-auth containers: - name: nginx image: 192.168.31.70/demo/php-demo:v2 ports: - containerPort: 80 name: web protocol: TCP resources: requests: cpu: 0.5 memory: 200Mi limits: cpu: 1 memory: 0.3Gi livenessProbe: httpGet: path: /status.php port: 80 initialDelaySeconds: 6 timeoutSeconds: 20 readinessProbe: httpGet: path: /status.php port: 80 initialDelaySeconds: 6 timeoutSeconds: 20 由于是在 test 名称空间下操作 所以需要在创建test 名称空间,并且在该名称空间下创建 secretnamespace.yaml apiVersion: v1kind: Namespacemetadata: name: test kubectl apply -f deployment.yaml 通过service暴露服务 service.yaml apiVersion: v1kind: Servicemetadata: name: php-demo namespace: testspec: selector: project: www app: php-demo ports: - name: web port: 80 targetPort: 80 type: NodePort 通过ingress来对外发布服务 ingress.yaml apiVersion: extensions/v1beta1kind: Ingressmetadata: name: php-demo namespace: testspec: rules: - host: php.ctnrs.com http: paths: - path: / backend: serviceName: php-demo servicePort: 80 验证访问 编辑 hosts⽂件 访问域名提⽰ 数据库连接出错,由于配置⽂件中的数据库连接信息是错的 模拟应⽤更新 数据库添加⽤户并授权 MariaDB [(none)]> grant all on wp.* to 'wp'@'192.168.31.%' identified by '123.com';MariaDB [(none)]> grant all on wp.* to 'wp'@'localhost' identified by '123.com'; 编辑 php-demo/wp-config.php 更新当前镜像 打tag为v2 docker build -t 192.168.31.70/demo/php-demo:v2 .docker push 192.168.31.70/demo/php-demo:v2 将 deployment.yaml 中的 镜像版本指定为 php-demo:v2 重新应⽤配置 kubectl apply -f deployment.yaml 再次验证访问 成功访问wp 因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuo6.com 版权所有 湘ICP备2023023988号-11
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务