每一年都奔走在自己de热爱里

愿你天黑有灯,下雨有伞

k8s部署Wordpress(定义不同的资源对象文件)

1)新建namespace(名称空间)
新建 wordpress-blog namespace,将应用都部署到wordpress-blog这个命名空间下面。
[23:17:36 root@k8s-master ~]#ll namespace.yaml pod.yml service.yaml
-rw-r--r-- 1 root root   64 8月  20 23:17 namespace.yaml
-rw-r--r-- 1 root root 1200 8月  20 23:15 pod.yml
-rw-r--r-- 1 root root  226 8月  20 23:16 service.yaml

#编写YAML文件:

 

知识扩展【点击打开】
 #编写YAML文件
#先编写YAML文件namespace.yaml。

#知识扩展:
#查看k8s的apiversion版本命令(k8s版本不一样,各个Pod和Deployment的apiversion也不一样):
kubectl api-versions
kubectl explain deployment.apiVersion

[15:34:01 root@k8s-master ~]#kubectl explain deployment.apiVersion
KIND:     Deployment
VERSION:  apps/v1      

FIELD:    apiVersion <string>

DESCRIPTION:
     APIVersion defines the versioned schema of this representation of an
     object. Servers should convert recognized schemas to the latest internal
     value, and may reject unrecognized values. More info:
     https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
[15:35:37 root@k8s-master ~]#kubectl explain pod
KIND:     Pod
VERSION:  v1

DESCRIPTION:
     Pod is a collection of containers that can run on a host. This resource is
     created by clients and scheduled onto hosts.

[15:55:42 root@k8s-master ~]#kubectl explain service
KIND:     Service
VERSION:  v1

#名称空间:(namespace.yaml):

#名称空间:(namespace.yaml)

[22:15:18 root@k8s-master ~]#cat namespace.yaml
apiVersion: v1
kind: Namespace
metadata:
  name: kube-wordpress

#应用清单:(pod.yaml):

#应用清单:(pod.yaml)
[23:38:33 root@k8s-master ~]#cat pod.yaml
# 创建pod
apiVersion: v1
kind: Pod
metadata:
  name: wordpress
  namespace: kube-wordpress
  labels:
    app: wordpress    # <==== 这里添加一个label标签,pod 向外暴露pod的service NodePort型端口需要用标签选择器。
spec:
  containers:
  - name: wordpress
    image: wordpress
    ports:
    - containerPort: 80
      name: wdport
    env:
    - name: WORDPRESS_DB_HOST
      value: 127.0.0.1:3306    # <==== 这里不能是localhost数据库的localhost默认是去找socket文件,然而在不同的容器之间文件系统是隔离的,会导致报错;
    - name: WORDPRESS_DB_USER
      value: wordpress
    - name: WORDPRESS_DB_PASSWORD
      value: wordpress
    imagePullPolicy: IfNotPresent
  - name: mysql
    image: mysql:5.7
    imagePullPolicy: IfNotPresent
    ports:
    - containerPort: 3306
      name: dbport
    env:
    - name: MYSQL_ROOT_PASSWORD
      value: dayi123
    - name: MYSQL_DATABASE
      value: wordpress
    - name: MYSQL_USER
      value: wordpress
    - name: MYSQL_PASSWORD
      value: wordpress
    volumeMounts:
    - name: db
      mountPath: /var/lib/mysql
  volumes:
    - name: db
      hostPath:
        path: /var/lib/mysql

######################################特别注意##################################################
@#需要特别注意:这里针对MySQL这个容器做了一个数据卷的挂载,这是为了能够将MySQL的数据能够持久化到节点上,这样下次MySQL容器重启过后数据不至于丢失。

#MySQL 和 Wordpress 在同一个 Pod 下面,所以在 Wordpress 中我们指定数据库地址的时候是用的 127.0.0.1:3306,因为这两个容器已经共享同一个 network namespace(网络名称空间) 了,然后如果我们要想把这个服务暴露给外部用户,需要创建一个 Service 或者 Ingress 对象!

#NodePort 类型的 Service:(service.yaml):

#NodePort 类型的 Service:(service.yaml)

[23:40:07 root@k8s-master ~]#cat service.yaml
apiVersion: v1
kind: Service
metadata:
  labels:
    app: wordpress
  name: wp-svc
  namespace: kube-wordpress
spec:
  ports:
  - port: 8080
    protocol: TCP
    targetPort: 80
  selector:
    app: wordpress
  type: NodePort
#因为只需要暴露 Wordpress 这个应用,所以只匹配了一个名为 wdport 的端口,现在我们来创建上面的几个资源对象:
[23:17:36 root@k8s-master ~]#ll namespace.yaml pod.yml service.yaml
-rw-r--r-- 1 root root   64 8月  20 23:17 namespace.yaml
-rw-r--r-- 1 root root 1200 8月  20 23:15 pod.yml
-rw-r--r-- 1 root root  226 8月  20 23:16 service.yaml
[23:19:50 root@k8s-master ~]#kubectl apply -f namespace.yaml
namespace/kube-wordpress created
[23:20:27 root@k8s-master ~]#kubectl apply -f pod.yaml
pod/wordpress created
[23:20:48 root@k8s-master ~]#kubectl apply -f service.yaml
service/wp-svc created


#接下来就是等待拉取镜像,启动 Pod:


[14:45:48 root@k8s-master ~]#kubectl get pods -n kube-wordpress
NAME        READY   STATUS    RESTARTS   AGE
wordpress   2/2     Running   0          2m28s
[14:46:58 root@k8s-master ~]#kubectl get svc -n kube-wordpress
NAME     TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
wp-svc   NodePort   10.100.158.109   <none>        8080:31706/TCP   2m47s
#查看Service的详细情况:

(本次实验)
[14:47:06 root@k8s-master ~]#kubectl describe svc -n kube-wordpress
Name:                     wp-svc
Namespace:                kube-wordpress
Labels:                   app=wordpress
Annotations:              <none>
Selector:                 app=wordpress
Type:                     NodePort
IP:                       10.100.158.109
Port:                     <unset>  8080/TCP
TargetPort:               80/TCP
NodePort:                 <unset>  31706/TCP
Endpoints:                10.244.1.2:80
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>

[14:55:58 root@k8s-master ~]#ss -ntl | grep 31706
LISTEN     0      128          *:31706                    *:*

[14:55:34 root@k8s-worker-node1 ~]#ss -ntl | grep 31706
LISTEN     0      128          *:31706                    *:*

[14:56:28 root@k8s-worker-node2 ~]#ss -ntl | grep 31706
LISTEN     0      128          *:31706                    *:*

#效果展示:

#特别注意:要添加属性type: NodePort,然后创建wordpress.yaml文件。

#访问服务
#查看svc
[14:45:48 root@k8s-master ~]#kubectl get pods -n kube-wordpress
NAME        READY   STATUS    RESTARTS   AGE
wordpress   2/2     Running   0          2m28s
[14:46:58 root@k8s-master ~]#kubectl get svc -n kube-wordpress
NAME     TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
wp-svc   NodePort   10.100.158.109   <none>        8080:31706/TCP   2m47s

#访问:任意节点ip+31706端口

 

posted @ 2022-08-21 15:18  一念6  阅读(360)  评论(0编辑  收藏  举报