Py学习  »  DATABASE

K8S学习指南(三)---安装Mysql并运行wordpress

高级小白 • 4 年前 • 373 次点击  
阅读 17

K8S学习指南(三)---安装Mysql并运行wordpress

K8S学习指南(三)---安装Mysql并运行wordpress


创建Mysql服务

定义一个服务需要三部分Pod Service PV(PVC)

# mysql-deployment.yaml 

apiVersion: v1            ## 指定APi版本
kind: Service             ## 表明是 kubernetes Service 
metadata:
  name: wordpress-mysql   ## Service 的全局唯一名称
  labels:
    app: wordpress        ## 用来识别pod
spec:
  ports:
    - port: 3306          ## 这里是创建虚拟IP的端口,直接ping 和 curl 是不通的
  selector:               ## 选择 pod.metadata.app&tier == wordpress&mysql 的pod(是的,一个service是可以对接多个pod的)
    app: wordpress
    tier: mysql
  clusterIP: None         ## 不建立虚拟IP
---
apiVersion: v1
kind: PersistentVolumeClaim   ## 是用户存储的请求,PVC消耗PV的资源,可以请求特定的大小和访问模式,需要指定归属于某个Namespace,在同一个Namespace的Pod才可以指定对应的PVC
metadata:
  name: mysql-pv-claim
  labels:
    app: wordpress
spec:
  accessModes:
    - ReadWriteOnce          ## 该volume只能被单个节点以读写的方式映射
  resources:
    requests:
      storage: 8Gi
---
## 定义Pod
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment          ## 指定创建资源的角色/类型.这里定义的是一个
metadata:
  name: wordpress-mysql   ## 全局唯一名称
  labels:
    app: wordpress
spec:                     ## 相关属性定义
  selector:               ## kubernetes 通过 spec.selector来筛选要控制的Pod
    matchLabels:
      app: wordpress
      tier: mysql
  strategy:               ## 指新的Pod替换旧的Pod的策略
    type: Recreate        ## Recreate  重建策略,在创建出新的Pod之前会先杀掉所有已存在的Pod
  template:               ## 这里定义Pod模版.K8S会根据此模板创建实例(副本)
    metadata:             ## # Pod 副本拥有的标签,对应 RC 的 selector.这里的labels必须匹配之前的spec.selector,否则创建一个无法匹配的Pod就会不停尝试创建新的Pod
      labels:
        app: wordpress
        tier: mysql
    spec:                 ## 容器内定义内容
      containers:
      - image: mysql:5.6  ## 对应Docker Image
        name: mysql
        env:
        - name: MYSQL_ROOT_PASSWORD   ## 定义root密码
          value: "123456"
        ports:
        - containerPort: 3306
          name: mysql
        volumeMounts:     ##  volumeMounts 字段保证了 /var/lib/mysql 文件夹由一个 PersistentVolume 支持
        - name: mysql-persistent-storage
          mountPath: /var/lib/mysql
      volumes:            ## 指定Volume的类型和内容
      - name: mysql-persistent-storage
        persistentVolumeClaim:
          claimName: mysql-pv-claim   ## 这里表明使用上文创建的PVC
复制代码
  1. 创建好 mysql-deployment.yaml 文件后,将他发布到K8S集群中,我们需要在Master节点中执行命令:
# kubectl create -f mysql-deployment.yaml

service/wordpress-mysql created
persistentvolumeclaim/mysql-pv-claim created
deployment.apps/wordpress-mysql created
复制代码
  1. kubectl 命令查看刚刚创建的Dem
# kubectl get deployment
NAME              READY   UP-TO-DATE   AVAILABLE   AGE
wordpress-mysql   1/1     1            1           89m
复制代码
  1. 查看刚刚创建的Service
# kubectl get svc
NAME              TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)    AGE
kubernetes        ClusterIP   10.96.0.1    <none>        443/TCP    139m
wordpress-mysql   ClusterIP   None         <none>        3306/TCP   90m
复制代码
  1. 查看Pod的创建情况时,可以运行下面的命令

kubectl describe pod 可以查看更加详细的情况

r# kubectl get pods -o wide --all-namespaces


    

NAMESPACE              NAME                                         READY   STATUS    RESTARTS   AGE    IP           NODE       NOMINATED NODE   READINESS GATES
default                wordpress-mysql-b67565868-pvlps              1/1     Running   0          90m    
复制代码

我们看到一个名为 wordpress-mysql--xxxxPod实例,这是K8S根据mysql 这个RC的定义自动创建的Pod.

由于Pod的调度以及下载Docker Image都需要一段时间,当Pod成功创建容器以后,状态会更新为Running.

  1. 通过docker ps 查看正在运行的容器.发现除了Mysql服务的Pod容器以及创建了,此外还有一个k8s_PODPause容器.这就是Pod的"根服务器".
# docker ps | grep mysql
1dae03a4fcdd        mysql                           "docker-entrypoint.s…"   2 hours ago         Up 2 hours                              k8s_mysql_wordpress-mysql-b67565868-pvlps_default_58f50096-fec0-43ed-ad01-4c696f155b58_0
37483feec714        k8s.gcr.io/pause:3.1            "/pause"                 2 hours ago         Up 2 hours                              k8s_POD_wordpress-mysql-b67565868-pvlps_default_58f50096-fec0-43ed-ad01-4c696f155b58_0

复制代码

启动myweb 博客

上面已经定义和创建好Mysql服务.接下来完成wordpress应用的启动过程

  1. 首先创建对应的文件wordpress-deployment.yaml
# application/wordpress/wordpress-deployment.yaml

apiVersion: v1
kind: Service
metadata:
  name: wordpress
  labels:
    app: wordpress
spec:
  ports:
    - port: 80
  selector:
    app: wordpress
    tier: frontend
  type: LoadBalancer
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: wp-pv-claim
  labels:
    app: wordpress
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi
---
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
  name: wordpress
  labels:
    app: wordpress
spec:
  selector:
    matchLabels:
      app: wordpress
      tier: frontend
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: wordpress
        tier: frontend
    spec:
      containers:
      - image: wordpress:4.8-apache
        name: wordpress
        env:
        - name: WORDPRESS_DB_HOST
          value: wordpress-mysql
        - name: WORDPRESS_DB_PASSWORD
          value: "123456"
        ports:
        - containerPort: 80
          name: wordpress
        volumeMounts:
        - name: wordpress-persistent-storage
          mountPath: /var/www/html
      volumes:
      - name: wordpress-persistent-storage
        persistentVolumeClaim:
          claimName: wp-pv-claim
复制代码
  1. 查看创建的wordpress对外开放端口
#  kubectl get services wordpress
NAME        TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
wordpress   LoadBalancer   10.107.143.141   <pending>     80:32314/TCP   5m2
复制代码

可以看到对外开放NodePort是 32314.(如果不指定随机在30000 - 350000中选取)

在浏览器上输入 http://Node的IP:32314/ 即可登陆wordpress

avatar


快速安装

kubectl apply -f


    
 https://raw.githubusercontent.com/charSLee013/Kubernetes-learn/master/chapter03/mysql-deployment.yaml
kubectl apply -f https://raw.githubusercontent.com/charSLee013/Kubernetes-learn/master/chapter03/wordpress-deployment.yaml
复制代码

其他

Kubernetes 删除资源指令
kubectl delete ([-f FILENAME] | TYPE [(NAME | -l label | --all)])
复制代码

示例

# 通过pod.json文件中指定的资源类型和名称删除一个pod
$ kubectl delete -f ./mysql-rc.yaml

# 通过控制台输入的JSON所指定的资源类型和名称删除一个pod
$ cat pod.json | kubectl delete -f -

# 删除所有名为“baz”和“foo”的pod和service
$ kubectl delete pod,service baz foo

# 删除所有带有lable name=myLabel的pod和service
$ kubectl delete pods,services -l name=myLabel

# 删除UID为1234-56-7890-234234-456456的pod
$ kubectl delete pod 1234-56-7890-234234-456456

# 删除所有的pod
$ kubectl delete pods --all
复制代码

选项

      --all[=false]: 使用[-all]选择所有指定的资源。
      --cascade[=true]: 如果为true,级联删除指定资源所管理的其他资源(例如:被replication controller管理的所有pod)。默认为true-f, --filename=[]: 用以指定待删除资源的文件名,目录名或者URL。
      --grace-period=-1: 安全删除资源前等待的秒数。如果为负值则忽略该选项。
      --ignore-not-found[=false]: 当待删除资源未找到时,也认为删除成功。如果设置了--all选项,则默认为true。
  -o, --output="": 输出格式,使用“-o name”来输出简短格式(资源类型/资源名)。
  -l, --selector="": 用于过滤资源的Label。
      --timeout=0: 删除资源的超时设置,0表示根据待删除资源的大小由系统决定。
复制代码

继承自父命令的选项

      --alsologtostderr[=false]: 同时输出日志到标准错误控制台和文件。
      --api-version="": 和服务端交互使用的API版本。
      --certificate-authority="": 用以进行认证授权的.cert文件路径。
      --client-certificate="": TLS使用的客户端证书路径。
      --client-key="": TLS使用的客户端密钥路径。
      --cluster="": 指定使用的kubeconfig配置文件中的集群名。
      --context="": 指定使用的kubeconfig配置文件中的环境名。
      --insecure-skip-tls-verify[=false]: 如果为true,将不会检查服务器凭证的有效性,这会导致你的HTTPS链接变得不安全。
      --kubeconfig="": 命令行请求使用的配置文件路径。
      --log-backtrace-at=:0: 当日志长度超过定义的行数时,忽略堆栈信息。
      --log-dir="": 如果不为空,将日志文件写入此目录。
      --log-flush-frequency=5s: 刷新日志的最大时间间隔。
      --logtostderr[=true]: 输出日志到标准错误控制台,不输出到文件。
      --match-server-version[=false]: 要求服务端和客户端版本匹配。
      --namespace="": 如果不为空,命令将使用此namespace。
      --password="": API Server进行简单认证使用的密码。
  -s, --server="": Kubernetes API Server的地址和端口号。
      --stderrthreshold=2: 高于此级别的日志将被输出到错误控制台。
      --token="": 认证到API Server使用的令牌。
      --user="": 指定使用的kubeconfig配置文件中的用户名。
      --username="": API Server进行简单认证使用的用户名。
      --v=0: 指定输出日志的级别。
      --vmodule=: 指定输出日志的模块,格式如下:pattern=N,使用逗号分隔。
复制代码

更多学习文章在点击访问


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/50775
 
373 次点击