1、docker启动mysql
docker pull mysql:8.0docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0
- -p 3306:3306 :映射容器服务的 3306 端口到宿主机的 3306 端口,外部主机可以直接通过 宿主机ip:3306 访问到 MySQL 的服务。
- MYSQL_ROOT_PASSWORD=123456:设置 MySQL 服务 root 用户的密码。
2、单节点mysql服务
1)创建pvc
apiVersion: v1kind: PersistentVolumeClaimmetadata:name: mysql-pvcnamespace: app-001spec:storageClassName: csi-hostpath-scaccessModes:- ReadWriteOnceresources:requests:storage: 10Gi
kubectl apply -f mysql-pvc.yaml
2)创建service
apiVersion: v1kind: Servicemetadata:name: mysql-svcnamespace: app-001spec:ports:- port: 3306selector:app: mysqlclusterIP: None
kubectl apply -f mysql-svc.yaml
3)创建statefulset
apiVersion: apps/v1kind: StatefulSetmetadata:name: mysqlnamespace: app-001spec:serviceName: mysql-svcselector:matchLabels:app: mysqltemplate:metadata:labels:app: mysqlspec:containers:- image: mysql:5.7name: mysqlenv:# Use secret in real usage- name: MYSQL_ROOT_PASSWORDvalue: password # 密码ports:- containerPort: 3306name: mysqlresources:limits:cpu: 800mmemory: 1Girequests:cpu: 500mmemory: 800MivolumeMounts:- name: mysql-persistent-storagemountPath: /var/lib/mysqlvolumes:- name: mysql-persistent-storagepersistentVolumeClaim:claimName: mysql-pvc
kubectl apply -f mysql-sts.yaml
4)测试
kubectl run -it --rm --image=mysql:5.7 --restart=Never mysql-client -- mysql -h mysql-0.mysql-svc.app-001.svc.cluster.local -ppasswordkubectl delete po mysql-client
导入SQL
$ docker run -itd --rm --name import-test geray/centos:v7-1 bash$ docker cp youyiyuan.sql import-test:/$ docker exec -it import-test bash$ yum -y install mysql$ mysql -h 10.244.36.126 -uroot -ppassword$ mysql -h 10.244.36.126 -uroot -ppassword < youyiyuan.sql
3、部署web
1)创建configmap或者secret
cat db.propertiesdriverClass=com.mysql.cj.jdbc.Driver# 应该使用mysql的svc名称(mysql-svc.app-001.svc.cluster.local)# 由于是单实例mysql,所以这里直接使用了pod名称url=jdbc:mysql://mysql-0.mysql-svc.app-001.svc.cluster.local:3306/youyiyuanusername=rootuserpwd=password
$ kubectl create secret generic web-youyiyuan-secret --from-file=db.properties -n app-001 -o yaml --dry-run=client | tee web-secret.yamlapiVersion: v1data:db.properties: ZHJpdmVyQ2xhc3M9Y29tLm15c3FsLmNqLmpkYmMuRHJpdmVyCnVybD1qZGJjOm15c3FsOi8vbXlzcWwtMC5teXNxbC1zdmMuYXBwLTAwMS5zdmMuY2x1c3Rlci5sb2NhbDozMzA2L3lvdXlpeXVhbgp1c2VybmFtZT1yb290CnVzZXJwd2Q9cGFzc3dvcmQKkind: Secretmetadata:name: web-youyiyuan-secretnamespace: app-001
kubectl apply -f web-secret.yaml
2)创建deployment
apiVersion: apps/v1kind: Deploymentmetadata:name: web-youyiyuannamespace: app-001labels:app: web-youyiyuanspec:replicas: 3selector:matchLabels:app: web-youyiyuantemplate:metadata:labels:app: web-youyiyuanspec:containers:- image: geray/youyiyuan:v1name: youyiyuanresources:limits:memory: "200Mi"cpu: "500m"requests:memory: "200Mi"cpu: "300m"livenessProbe:httpGet:path: /port: 8080initialDelaySeconds: 3periodSeconds: 3volumeMounts:- name: db-filemountPath: "/usr/local/tomcat/webapps/youyiyuan3/WEB-INF/classes/db.properties"subPath: db.properties # subPath不会覆盖原有目录或目录的其他文件readOnly: truevolumes:- name: db-filesecret:secretName: web-youyiyuan-secret
kubectl apply -f web-deployemnt.yaml
3)创建service
kubectl expose deployment web-youyiyuan --type=NodePort --port=8080 --target-port=8080 --name web-youyiyuan-svc -o yaml --dry-run=client | tee web-youyiyuan-svc.yamlapiVersion: v1kind: Servicemetadata:name: web-youyiyuan-svcnamespace: app-001spec:ports:- port: 8080protocol: TCPtargetPort: 8080selector:app: web-youyiyuantype: NodePort
kubectl apply -f web-youyiyuan-svc.yaml
4)创建ingress(https)
- 自制证书文件
openssl genrsa -out tls-yyy.key 2048openssl req -new -x509 -key tls-yyy.key -out tls-yyy.crt -subj /C=CN/ST=GS/L=LZ/O=devops/CN=demo.youyiyuan.cn# 两个文件tls-yyy.key tls-yyy.crt

- 生成secret
kubectl create secret tls web-yyy -n app-001 --cert=tls-yyy.crt --key=tls-yyy.key -o yaml --dry-run=client | tee secret-yyy.yaml
下面是第二种方式
cat crets.shcat > ca-config.json <<EOF{"signing": {"default": {"expiry": "87600h"},"profiles": {"kubernetes": {"expiry": "87600h","usages": ["signing","key encipherment","server auth","client auth"]}}}}EOFcat > ca-csr.json <<EOF{"CN": "kubernetes","key": {"algo": "rsa","size": 2048},"names": [{"C": "CN","L": "Beijing","ST": "Beijing"}]}EOFcfssl gencert -initca ca-csr.json | cfssljson -bare ca -cat > demo.youyiyuan.cn-csr.json <<EOF{"CN": "demo.youyiyuan.cn","hosts": [],"key": {"algo": "rsa","size": 2048},"names": [{"C": "CN","L": "BeiJing","ST": "BeiJing"}]}EOF# 这里可以使用k8s的ca和ca-keycfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes demo.youyiyuan.cn-csr.json | cfssljson -bare demo.youyiyuan.cn
ingress.yaml
$ kubectl -n app-001 create ingress web-youyiyun-ing --rule="demo.youyiyuan.cn/*=web-youyiyuan-svc:8080" -o yaml --dry-run=client | tee /aliang-cka-06/mysql/mysql/web/web-youyiyuan-ingress.yamlapiVersion: networking.k8s.io/v1kind: Ingressmetadata:name: web-youyiyuan-ingnamespace: app-001spec:rules:- host: demo.youyiyuan.cnhttp:paths:- backend:service:name: web-youyiyuan-svcport:number: 8080path: /pathType: Prefixtls:- hosts:- demo.youyiyuan.cnsecretName: web-youyiyuan-svc
4、网络策略
只允许本名称空间下的带有app=web-youyiyuan标签的pod访问3306端口
apiVersion: networking.k8s.io/v1kind: NetworkPolicymetadata:name: db-network-policynamespace: app-001spec:podSelector: {}policyTypes:- Ingressingress:- from:- podSelector:matchLabels:app: web-youyiyuanports:- protocol: TCPport: 3306
