mysql 小例子
- 建立一個mysql-rc.yaml 檔案
apiVersion: v1
kind: ReplicationController # 副本控制器RC
metadata:
name: mysql # RC 的名稱,全局唯一
spec:
replicas: 1 # 副本期待數量
selector:
app: mysql # 符合目标的Pod擁有此标簽
template: # 根據此磨吧建立Pod的副本(執行個體)
metadata:
labels:
app: mysql # Pod 副本擁有的标簽,對應的RC的Selector
spec:
containers: # Pod 内容器的定義部分
- name: mysql # 容器的名稱
image: mysql # 容器對應的Docker Image
ports:
- containerPort: 3306 # 容器應用監聽的端口号
env: # 注入容器的環境變量
- name: MYSQL_ROOT_PASSWORD # 這裡第一次寫錯了 MySQL_ROOT_PASSWORD
value: "root"
複制
釋出RC檔案:
kubectl create -f mysql-rc.yaml
複制
檢視建立的RC
kubectl get rc
複制
檢視Pod的建立情況
kubectl get pods
複制
建立失敗,檢視更多失敗資訊
kubectl describe pod example
複制
kubectl get events
複制
檢視日志,錯誤資訊
kubectl logs -p <pod name>
複制
錯誤
➜ k8s kubectl logs -p mysql-lvq7v
error: database is uninitialized and password option is not specified
You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD
複制
這個是rc檔案mysql 密碼這裡寫的有問題,改掉就好了
- 建立一個service, 檔案名mysql-svc.yaml
apiVersion: v1
kind: Service # 表明是Kubernetes Service
metadata:
name: mysql # Service 的全局唯一名稱
spec:
ports:
- port: 3306 # Service 提供服務的端口号,這裡寫的時候寫成了 - port:3306 沒有用空格隔開
selector: # Service 對應的Pod 擁有這裡定義的标簽
app: mysql
複制
建立
kubectl create -f mysql-svc.yaml
複制
檢視剛才建立的service
kubectl get svc
複制
碰到一個錯誤, 是由于縮進引起的
error: error validating "mysql-svc.yaml": error validating data: ValidationError(Service.spec.ports[0]): invalid type for io.k8s.api.core.v1.ServicePort: got "string", expected "map"; if you choose to ignore these errors, turn validation off with --validate=false
複制
根據 service的唯一名字,容器可以從環境變量中擷取到Service對應的Cluster IP 位址和端口,就可以發起TCP/IP連接配接請求了。
這樣就建立了一個mysql 的服務。