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端口
本文来自博客园,作者:一念6,转载请注明原文链接:https://www.cnblogs.com/zeng666/p/16610064.html