# container-examples **Repository Path**: swaince/container-examples ## Basic Information - **Project Name**: container-examples - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-10-15 - **Last Updated**: 2021-11-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### IOT 基础云 容器化演示项目 #### dubbo框架迁移 k8s 流程 准备: 1. 一个完整的dubbo项目,本项目中为 `dubbo` 模块,包含consumer、provider、facade 2. 一个可用的k8s集群 ***注: ***本项目下所有模块在`install`阶段会自动使用本地`docker`或远程`docker`配置打包 ##### 1. 安装zookeeper `dubbo`项目使用`zookeeper`作为注册中心,必需先安装`zookeeper`, 由于只用作测试使用,zookeeper使用单机模式, 并且为了快速测试在测试阶段使用`Deployment`部署, 生产环境推荐使用`StatefulSet` zookeeper 资源清单如下: ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: zookeeper namespace: container spec: selector: matchLabels: app: zookeeper template: metadata: labels: app: zookeeper spec: containers: - name: zk image: docker.io/library/zookeeper:latest imagePullPolicy: IfNotPresent ports: - name: service-tcp containerPort: 2181 --- apiVersion: v1 kind: Service metadata: name: zookeeper-svc namespace: container spec: selector: app: zookeeper type: NodePort ports: - name: service-http port: 2181 targetPort: 2181 nodePort: 32181 ``` **注: ** 1. `Service` 使用`NodePort`方式,k8s集群内服务访问`zookeeper`使用ServiceName,在本配置中为 `zookeeper-svc`, 集群外服务注册访问使用 k8s 集群 任意节点的 `nodePort`, 本配置中使用 `32181` 2. 此方式也为容器化过程中,服务逐步迁移使用的方式,k8s 集群外服务需要与内部服务使用同一个`zookeeper`集群,后续会提供`ExternalIP`类型的 Service的配置,来提供集群内部使用外部`zookeeper`集群的支持 ##### 2. 部署 providers 1. account-provider.yml ```yaml # 应用配置文件 apiVersion: v1 kind: ConfigMap metadata: name: account-provider-cm namespace: container data: application.yaml: | server: port: 8080 # 程序起动端口 spring: application: name: account-provider dubbo: application: name: account-provider registry: address: zookeeper://${zookeeper.address:127.0.0.1}:${zookeeper.port:2181} protocol: name: dubbo port: 20880 # dubbo 暴露的端口 --- # 程序部署 apiVersion: apps/v1 kind: Deployment metadata: name: account-provider namespace: container spec: selector: matchLabels: app: account-provider template: metadata: labels: app: account-provider spec: containers: - name: account-provider image: com.haier.net/iot/account-provider:0.0.1-SNAPSHOT imagePullPolicy: IfNotPresent ports: - name: web-http containerPort: 8080 - name: dubbo-port containerPort: 20880 env: - name: zookeeper.address value: zookeeper-svc - name: DUBBO_IP_TO_REGISTRY valueFrom: fieldRef: fieldPath: status.hostIP # 使用 downford API 注册主机IP - name: DUBBO_PORT_TO_REGISTRY value: "30881" # dubbo 注册端口 volumeMounts: - name: application-prop mountPath: /opt/application.yaml # 挂载配置文件 subPath: application.yaml args: - --spring.config.location=/opt/application.yaml volumes: - name: application-prop configMap: name: account-provider-cm --- apiVersion: v1 kind: Service metadata: name: account-provider namespace: container spec: type: NodePort selector: app: account-provider ports: - name: web-http port: 8080 # 集群内访问端口 targetPort: 8080 # 服务目标端口 nodePort: 30080 # 集群外访问端口,若不配置,k8s分配随机端口 - name: dubbo port: 20880 targetPort: 20880 nodePort: 30881 # 服务通信端口,此端口必须与 Pod 内环境变量 DUBBO_PORT_TO_REGISTRY 的值相同 ``` 2. order-provider.yml ```yaml apiVersion: v1 kind: ConfigMap metadata: name: order-provider-cm namespace: container data: application.yaml: | server: port: 8080 spring: application: name: order-provider dubbo: application: name: order-provider registry: address: zookeeper://${zookeeper.address:127.0.0.1}:${zookeeper.port:2181} protocol: name: dubbo port: 20880 --- apiVersion: apps/v1 kind: Deployment metadata: name: order-provider namespace: container spec: selector: matchLabels: app: order-provider template: metadata: labels: app: order-provider spec: containers: - name: order-provider image: com.haier.net/iot/order-provider:0.0.1-SNAPSHOT imagePullPolicy: IfNotPresent ports: - name: web-http containerPort: 8080 - name: dubbo-port containerPort: 20880 env: - name: zookeeper.address value: zookeeper-svc - name: DUBBO_IP_TO_REGISTRY valueFrom: fieldRef: fieldPath: status.hostIP - name: DUBBO_PORT_TO_REGISTRY value: "30883" volumeMounts: - name: application-prop mountPath: /opt/application.yaml subPath: application.yaml args: - --spring.config.location=/opt/application.yaml volumes: - name: application-prop configMap: name: order-provider-cm --- apiVersion: v1 kind: Service metadata: name: order-provider namespace: container spec: type: NodePort selector: app: order-provider ports: - name: web-http port: 8080 targetPort: 8080 - name: dubbo port: 20880 targetPort: 20880 nodePort: 30883 ``` 3. storage-provider.yml ```yaml apiVersion: v1 kind: ConfigMap metadata: name: storage-provider-cm namespace: container data: application.yaml: | server: port: 8080 spring: application: name: storage-provider dubbo: application: name: storage-provider registry: address: zookeeper://${zookeeper.address:127.0.0.1}:${zookeeper.port:2181} protocol: name: dubbo port: 20880 --- apiVersion: apps/v1 kind: Deployment metadata: name: storage-provider namespace: container spec: selector: matchLabels: app: storage-provider template: metadata: labels: app: storage-provider spec: containers: - name: storage-provider image: com.haier.net/iot/storage-provider:0.0.1-SNAPSHOT imagePullPolicy: IfNotPresent ports: - name: web-http containerPort: 8080 - name: dubbo-port containerPort: 20880 env: - name: zookeeper.address value: zookeeper-svc - name: DUBBO_IP_TO_REGISTRY valueFrom: fieldRef: fieldPath: status.hostIP - name: DUBBO_PORT_TO_REGISTRY value: "30885" volumeMounts: - name: application-prop mountPath: /opt/application.yaml subPath: application.yaml args: - --spring.config.location=/opt/application.yaml volumes: - name: application-prop configMap: name: storage-provider-cm --- apiVersion: v1 kind: Service metadata: name: storage-provider namespace: container spec: type: NodePort selector: app: storage-provider ports: - name: web-http port: 8080 targetPort: 8080 - name: dubbo port: 20880 targetPort: 20880 nodePort: 30885 ``` 4.account-consumer.yml ```yaml apiVersion: v1 kind: ConfigMap metadata: name: account-consumer-cm namespace: container data: application.yaml: | server: port: 8080 spring: application: name: account-consumer dubbo: application: name: account-consumer registry: address: zookeeper://zookeeper-svc:2181 consumer: timeout: 3000 --- apiVersion: apps/v1 kind: Deployment metadata: name: account-consumer namespace: container spec: selector: matchLabels: app: account-consumer template: metadata: labels: app: account-consumer spec: containers: - name: acccount-consumer image: com.haier.net/iot/account-consumer:0.0.1-SNAPSHOT imagePullPolicy: IfNotPresent ports: - name: web-http containerPort: 8080 - name: dubbo-port containerPort: 20880 env: - name: zookeeper.address value: zookeeper-svc - name: DUBBO_IP_TO_REGISTRY valueFrom: fieldRef: fieldPath: status.hostIP - name: DUBBO_PORT_TO_REGISTRY value: "20880" volumeMounts: - name: application-prop mountPath: /opt/application.yaml subPath: application.yaml args: - --spring.config.location=/opt/application.yaml volumes: - name: application-prop configMap: name: account-consumer-cm --- apiVersion: v1 kind: Service metadata: name: account-consumer namespace: container spec: type: NodePort selector: app: account-consumer ports: - name: web-http port: 8080 targetPort: 8080 - name: dubbo port: 20880 targetPort: 20880 nodePort: 30880 ``` 5. order-consumer.yml ```yaml apiVersion: v1 kind: ConfigMap metadata: name: order-consumer-cm namespace: container data: application.yaml: | server: port: 8080 spring: application: name: order-consumer dubbo: application: name: order-consumer registry: address: zookeeper://zookeeper-svc:2181 consumer: timeout: 3000 --- apiVersion: apps/v1 kind: Deployment metadata: name: order-consumer namespace: container spec: selector: matchLabels: app: order-consumer template: metadata: labels: app: order-consumer spec: containers: - name: acccount-consumer image: com.haier.net/iot/order-consumer:0.0.1-SNAPSHOT imagePullPolicy: IfNotPresent ports: - name: web-http containerPort: 8080 - name: dubbo-port containerPort: 20880 env: - name: zookeeper.address value: zookeeper-svc - name: DUBBO_IP_TO_REGISTRY valueFrom: fieldRef: fieldPath: status.hostIP - name: DUBBO_PORT_TO_REGISTRY value: "20880" volumeMounts: - name: application-prop mountPath: /opt/application.yaml subPath: application.yaml args: - --spring.config.location=/opt/application.yaml volumes: - name: application-prop configMap: name: order-consumer-cm --- apiVersion: v1 kind: Service metadata: name: order-consumer namespace: container spec: type: NodePort selector: app: order-consumer ports: - name: web-http port: 8080 targetPort: 8080 - name: dubbo port: 20880 targetPort: 20880 nodePort: 30882 ``` 6. storage-consumer.yml ```yaml apiVersion: v1 kind: ConfigMap metadata: name: storage-consumer-cm namespace: container data: application.yaml: | server: port: 8080 spring: application: name: storage-consumer dubbo: application: name: storage-consumer registry: address: zookeeper://zookeeper-svc:2181 consumer: timeout: 3000 --- apiVersion: apps/v1 kind: Deployment metadata: name: storage-consumer namespace: container spec: selector: matchLabels: app: storage-consumer template: metadata: labels: app: storage-consumer spec: containers: - name: acccount-consumer image: com.haier.net/iot/storage-consumer:0.0.1-SNAPSHOT imagePullPolicy: IfNotPresent ports: - name: web-http containerPort: 8080 - name: dubbo-port containerPort: 20880 env: - name: zookeeper.address value: zookeeper-svc - name: DUBBO_IP_TO_REGISTRY valueFrom: fieldRef: fieldPath: status.hostIP - name: DUBBO_PORT_TO_REGISTRY value: "20880" volumeMounts: - name: application-prop mountPath: /opt/application.yaml subPath: application.yaml args: - --spring.config.location=/opt/application.yaml volumes: - name: application-prop configMap: name: storage-consumer-cm --- apiVersion: v1 kind: Service metadata: name: storage-consumer namespace: container spec: type: NodePort selector: app: storage-consumer ports: - name: web-http port: 8080 targetPort: 8080 - name: dubbo port: 20880 targetPort: 20880 nodePort: 30884 ```