部署项目前的梳理:
1.项目的代码构成,什么语言开发的
2.项目的依赖环境
3.项目的配置文件在哪里
4.项目的端口清单
5.项目有没有做数据的持久化
容器交付流程 
在K8s平台部署项目流程 
在K8s平台部署Java网站项目 
阿里云maven源地址: https://maven.aliyun.com/mvn/guide 
第一步:制作镜像
yum install java-1.8.0-openjdk maven git -y git clone  https://github.com/lizhenliang/tomcat-java-demo mvn clean package -Dmaven.test.skip=true   unzip target/*.war -d target/ROOT  
 
FROM lizhenliang/tomcat  LABEL maintainer www.ctnrs.com RUN rm  -rf /usr/local/tomcat/webapps/* COPY target/ROOT /usr/local/tomcat/webapps/ROOT 
 
docker build -t image:tag . docker push <镜像仓库地址>/<项目名>/image:tag 
 
 
使用镜像仓库(私有仓库、公共仓库):
1、配置可信任(如果仓库是HTTPS访问不用配置)
{     insecure-registries": [" 192.168.0.13"]  }     
 
2、将镜像仓库认证凭据保存在K8s Secret中
kubectl create secret docker-registry registry-auth --docker-username=admin --docker-password=Harbor12345 --docker-server=192.168.0.13 
 
3、在yaml中使用这个认证凭据
imagePullSecrets: - name: registry-auth 
 
配置认证的的原因是部署的harbor是私有仓库,k8s的每个节点每次去拉取镜像都必须登录harbor仓库,比较麻烦,通过在yaml配置文件指定docker登录认证凭据,这样docker每次部署的时候就会自动去拉取镜像了。
第二步:使用控制器部署镜像
注意:在pod中挂载configmap配置文件时,如果指定容器内挂载的目录不是空目录,那么会覆盖原来目录下的内容。
部署configmap
vim configmap.yaml
apiVersion: v1 kind: ConfigMap metadata:   name: java-demo-config data:     application.yml: |         server:           port: 8080         spring:           datasource:             url: jdbc:mysql://java-demo-db:3306/k8s?characterEncoding=utf-8             username: azhe             password: 123456             driver-class-name: com.mysql.jdbc.Driver           freemarker:             allow-request-override: false              cache: true              check-template-location: true              charset: UTF-8             content-type: text/html; charset=utf-8             expose-request-attributes: false              expose-session-attributes: false              expose-spring-macro-helpers: false              suffix: .ftl             template-loader-path:               - classpath:/templates/   
 
部署deployment
vim deployment.yaml
apiVersion: apps/v1 kind: Deployment metadata:   name: web spec:   replicas: 3   selector:     matchLabels:       app: java   template:     metadata:       labels:         app: java     spec:       imagePullSecrets:       - name: registry-auth       containers:       - image: 192.168.0.13/demo/java-demo:v1         name: java-demo         resources:           requests:             cpu: 0.5             memory: 500Mi           limits:             cpu: 1             memory: 1Gi         livenessProbe:           httpGet:             path: /             port: 8080           initialDelaySeconds: 40           periodSeconds: 10         readinessProbe:           httpGet:             path: /             port: 8080           initialDelaySeconds: 40           periodSeconds: 10         volumeMounts:         - name: config           mountPath: "/usr/local/tomcat/webapps/ROOT/WEB-INF/classes/application.yml"            subPath: "application.yml"        volumes:       - name: config         configMap:           name: java-demo-config           items:           - key: "application.yml"              path: "application.yml"   
 
kubectl apply -f configmap.yaml  kubectl apply -f deployment.yaml  
 
第三步:对外暴露应用
部署service
vim service.yaml
apiVersion: v1 kind: Service metadata:   name: java-demo spec:   selector:     app: java   ports:     - protocol: TCP       port: 80       targetPort: 8080 
 
部署ingress(首先部署nginx-ingress-controller,监听端口是80和443)
vim ingress.yaml
apiVersion: networking.k8s.io/v1 kind: Ingress metadata:   name: java-demo spec:   rules:   - host: java.ctnrs.com     http:       paths:         - path: /           pathType: Prefix           backend:             service:               name: java-demo               port:                 number: 80 
 
部署mysql数据库(1.部署NFS实现自动创建PV插件 2.导入表到k8s数据库)
nfs-client.zip 
yum install nfs-utils mkdir  -p /nfs/kubernetesvim /etc/exports /nfs/kubernetes *(rw,no_root_squash) systemctl start nfs systemctl enable  nfs git clone  https://github.com/kubernetes-incubator/external-storage  cd  nfs-client/deploy kubectl apply -f rbac.yaml  kubectl apply -f deployment.yaml  kubectl apply -f class.yaml  kubectl get sc   kubectl get pod  kubectl cp  tables_ly_tomcat.sql java-demo-db-6c775c4d4b-7xfgc:/ kubectl exec  -it java-demo-db-6c775c4d4b-7xfgc -- bash mysql -u root -p$MYSQL_ROOT_PASSWORD  show databses; use k8s; source  /tables_ly_tomcat.sql;
 
vim mysql.yaml
apiVersion: v1 kind: Secret metadata:   name: java-demo-db    namespace: default type : Opaquedata:   mysql-root-password: "MTIzNDU2"    mysql-password: "MTIzNDU2"  --- apiVersion: apps/v1 kind: Deployment metadata:   name: java-demo-db    namespace: default spec:   selector:     matchLabels:       project: www       app: mysql   template:     metadata:       labels:         project: www         app: mysql     spec:       containers:       - name: db         image: mysql:5.7.30         resources:           requests:             cpu: 500m             memory: 512Mi           limits:              cpu: 500m             memory: 512Mi         env :         - name: MYSQL_ROOT_PASSWORD           valueFrom:             secretKeyRef:               name: java-demo-db               key: mysql-root-password         - name: MYSQL_PASSWORD           valueFrom:             secretKeyRef:               name: java-demo-db               key: mysql-password         - name: MYSQL_USER           value: "azhe"          - name: MYSQL_DATABASE           value: "k8s"          ports:         - name: mysql           containerPort: 3306         livenessProbe:           exec :             command :             - sh             - -c             - "mysqladmin ping -u root -p${MYSQL_ROOT_PASSWORD} "            initialDelaySeconds: 30           periodSeconds: 10         readinessProbe:           exec :             command :             - sh             - -c             - "mysqladmin ping -u root -p${MYSQL_ROOT_PASSWORD} "            initialDelaySeconds: 5           periodSeconds: 10         volumeMounts:         - name: data           mountPath: /var/lib/mysql                volumes:       - name: data         persistentVolumeClaim:           claimName: java-demo-db --- apiVersion: v1 kind: PersistentVolumeClaim metadata:   name: java-demo-db    namespace: default spec:   storageClassName: "managed-nfs-storage"    accessModes:     - "ReadWriteOnce"    resources:     requests:       storage: "8Gi"  --- apiVersion: v1 kind: Service metadata:   name: java-demo-db   namespace: default spec:   type : ClusterIP   ports:   - name: mysql     port: 3306     targetPort: mysql   selector:     project: www     app: mysql  
 
kubectl apply -f service.yaml  kubectl apply -f ingress.yaml  kubectl apply -f mysql.yaml  
 
访问java.ctnrs.com ,添加用户验证数据库是否可用
第四步:增加公网负载均衡器
upstream java-demo {       server 192.168.0.12:80;       server 192.168.0.13:80;     }       server {          listen 81;          server_name java.ctnrs.com;          location / {             proxy_pass http://java-demo;             proxy_set_header Host $Host ;          }       } 
 
访问java.ctnrs.com:81 
1、为指定用户授权访问不同命名空间权限
2、使用Helm完成Java网站项目部署
注:自由发挥,实现需求即可