k8s部署应用案例

服务介绍

  • t-sc 服务依赖于mysql
  • t-kateway 服务依赖于t-sc

docker镜像推送

下载mysql 5.7镜像
制作sc kateway镜像
参考任意节点登录harbor并推送镜像到harbor仓库将镜像推送到harbor仓库

k8sMaster获取登录私服Harbor的秘钥

docker login 192.168.10.102
## admin   Harbor12345

在/root/.docker/config.json里面有一个秘钥

cat /root/.docker/config.json | base64 -w 0
	==>得到: ewoJImF1dGhzIjogewoJCSIxOTIuMTY4LjEwLjEwMiI6IHsKCQkJImF1dGgiOiAiWVdSdGFXNDZTR0Z5WW05eU1USXpORFU9IgoJCX0KCX0KfQ==

K8sMaster节点任意目录

vim secret.yaml

修改其中的dockerconfigjson为上面获取到的值

apiVersion: v1
kind: Secret
metadata:
  name: login
type: kubernetes.io/dockerconfigjson
data:
  .dockerconfigjson: ewoJImF1dGhzIjogewoJCSIxOTIuMTY4LjEwLjEwMiI6IHsKCQkJImF1dGgiOiAiWVdSdGFXNDZTR0Z5WW05eU1USXpORFU9IgoJCX0KCX0KfQ==

运行login应用

kubectl apply secret.yaml

创建yaml文件

创建项目文件夹

mkdir /root/mytest
mkdir -p /root/mytest/t-gateway
mkdir -p /root/mytest/t-mysql
mkdir -p /root/mytest/t-sc

t-mysql的deployment和service配置创建

cd /root/mytest/t-mysql
vim deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: t-mysql-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: t-mysql
      env: testing
  template:
    metadata:
      labels:
        app: t-mysql
        env: testing
    spec:
      containers:
      - name: t-mysql
        image: 192.168.10.102/lwg/mysql  ## harbor仓库中的mysql镜像和tag(这里是latest)
        ports: 
        - name: mysql-port
          containerPort: 3306
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: "123456"
      imagePullSecrets: ## 登录harbor的秘钥
      - name: login
cd /root/mytest/t-mysql
vim service.yaml
apiVersion: v1
kind: Service
metadata:
  name: t-mysql-service
  labels: 
    app: t-mysql
    env: testing
spec:
  ports:
  - protocol: TCP
    port: 3306
    targetPort: 3306
    nodePort: 30006   ## 这个端口可以暴露出来,在windows上可以访问到
  type: NodePort
  selector:
    app: t-mysql
    env: testing

t-sc的deployment和service配置创建

cd /root/mytest/t-sc
vim deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: t-service-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: t-service
      env: testing
  template:
    metadata:
      labels:
        app: t-service
        env: testing
    spec:
      containers:
      - name: t-service
        image: 192.168.10.102/lwg/service:3.0  ## harbor仓库地址中的镜像
        ports: 
        - name: service-port
          containerPort: 8020 
        env: 
          - name: DATA_SOURCE_IP   ## 配置一个环境变量名,然后在t-sc服务的application.yml中可以获取到
            value: t-mysql-service  ## 使用mysql pod的metadata.name可以代理到pod中访问到mysql
      imagePullSecrets:  ## 配置登录harbor的秘钥
      - name: login
cd /root/mytest/t-sc
vim service.yaml
apiVersion: v1
kind: Service
metadata:
  name: t-service-service
  labels: 
    app: t-service
    env: testing
spec:
  ports:
  - protocol: TCP
    port: 8020
    targetPort: 8020
    nodePort: 30020
  type: NodePort
  selector:
    app: t-service
    env: testing

其中 t-sc是一个springboot项目,它的aplication.yml如下:

server:
  port: 8020

spring:
  datasource:
    username: root
    password: 123456
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://${DATA_SOURCE_IP}:3306/test?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&failOverReadOnly=false

t-gateway的deployment和service配置创建

cd /root/mytest/t-gateway
vim deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: t-gateway-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: t-gateway
      env: testing
  template:
    metadata:
      labels:
        app: t-gateway
        env: testing
    spec:
      containers:
      - name: t-gateway
        image: 192.168.10.102/lwg/kateway:2.0
        volumeMounts:
        - name: wwwroot
          mountPath: /work
        ports: 
        - name: gateway-port
          containerPort: 8030
        env:
          - name: SERVER_IP
            value: t-service-service
      imagePullSecrets: 
      - name: login
      volumes:   ##创建一个挂载卷(把nfs服务器上的/data/nfs/work挂载到容器内部的/work目录)
        - name: wwwroot
          nfs: 
             server: 192.168.10.105
             path: /data/nfs/work

cd /root/mytest/t-gateway
vim service.yaml
apiVersion: v1
kind: Service
metadata:
  name: t-gateway-service
  labels:
    app: t-gateway
spec:
  ports:
  - protocol: TCP
    port: 8030
    targetPort: 8030
    nodePort: 30030
  type: NodePort
  selector:
    app: t-gateway
    env: testing

其中,t-gateway的application.properties如下:

server.port=8030
test.list.url=http://${SERVER_IP}:8020

启动应用

启动应用:

cd /root
kubectl apply -R -f mytest/

访问应用:任意节点:30030/api访问

如何挂载一个配置文件到容器内部

方式1:如果是文本文件,使用configmap的方式

1)创建一个configmap
	提前创建一个index.html
	kubectl create configmap index-html --from-file index.html
2)deployment.yaml文件:
	
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: nginx-deploy
  name: nginx-deploy
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx-deploy
  strategy: {}
  template:
    metadata:
      labels:
        app: nginx-deploy
    spec:
      containers:
      - image: nginx
        name: nginx-deploy
        volumeMounts:    #挂载
        - mountPath: "/usr/share/nginx/html/index2.html"   # 挂载到具体容器内部的文件全目录,包括文件名
          name: sample-volumn    # 关联挂载数据卷
          subPath: index2.html   # 如果有了这个配置,就可以关联到具体的文件,名称和文件名完全一样。如果没有这个配置,那么configmap生成的文件怪哉到上面的目录!!!并且这个目录里面只有这一个文件
      volumes:				 # 定义一个数据卷
      - name: sample-volumn  # 给定一个数据卷的名称
        configMap:           # 使用configmap类型
          name: index-html   # 关联春根据的configma

方式2:采用上面部署t-gateway的方式,但是一定要使用和configmap一样的subPath属性,才能挂载成一个文件

K8S常用命令

  • 1.直接创建一个pod并运行(运行一个deployment): kubectl create deployment web --image=nginx [其中metadata.name=web]

  • 2.对创建好的pod暴露一个端口(运行一个service): kubectl expose deployment web --port=80 --type=NodePort --target-port=80 --name=web1

  • 3.使用deployment和yml创建一个可外部访问的pod: 1)生成一个yaml模板文件: kubectl create deployment web --image=nginx --dry-run -o yaml > web.yaml
    2)使用yaml文件部署应用: kubectl apply -f web.yaml
    3)对外进行发布(暴露端口号)yaml模板生成: kubectl expose deployment web --port=80
    –type=NodePort --target-port=80 --name=web1 -o yaml > web1.yaml 4)执行发布: kubectl apply -f web1.yaml 5)可以使用任意的node节点,加上暴露的端口去访问。

  • 4.获取查看命令: kubectl describe pod : 查看一个pod的运行情况 kubectl get pods -n namespace [kubectl get pods --all-namespaces] kubectl get
    deployment : 获取所有的deployment kubectl get svc : 获取所有的service

  • 5.删除相关: kubectl delete deployment xxx : 删除一个deployment [kubectl delete deployment --all] kubectl delete svc xxx : 删除一个service
    [kubectl delete svc --all] kubectl delete pod pod : 删除一个pod kubectl
    delete deployment xxx kubectl delete pod PODNAME -n NAMESPACE
    –grace-period=0 --force : 强制删除一个pod

  • 6.帮助命令: kubectl --help kubectl get --help

  • 7.有状态服务:注册中心nacos/mysql一般直接搭建在机器上(这种都是主从架构),不适合用k8s部署。

  • 8.重启一个pod: kubectl get pod {podname} -n {namespace} -o yaml | kubectl replace --force -f -

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值