0
点赞
收藏
分享

微信扫一扫

基于Python的招聘岗位数据分析系统的设计与实现

weednoah 2024-05-25 阅读 20

目录

一   k8s 支持的语言格式

1,YAML 语法格式

2,查看 api 资源版本标签

二   k8s 运行nginx pod实例  yaml文件 具体讲解

1,写一个yaml文件demo

2,deployment 管理nginx 的yaml 文件

3,创建资源对象

4,查看创建的pod资源

5,创建service服务对外提供访问并测试

6,创建service资源对象

7,查看创建的service

8,验证结果

三   快速写yaml 文件方法

1,用 --dry-run 命令 创建但不执行

2,  查看生成yaml格式

3,  查看生成json格式

4,  使用yaml格式导出生成模板

5,  将现有的资源生成模板导出

6,  保存到文件中

7,  查看字段帮助信息,可一层层的查看相关资源对象的帮助信息

四    实战演练

1,用yaml 文件  k8s 运行nginx的pod实例

1.1 实验需求

1.2 创建命名空间

1.3 创建pod 实例

1.4 创建service

1.5  修改得到的yaml 文件

1.6  执行yaml 文件

1.7  查看结果

1.8 进容器 做页面

1.9 访问 nginx

2,  用yaml 文件  k8s 运行redis的pod实例 (指定暴露端口)

2.1 用deployment 控制器创造 redis 实例

2.2 暴露端口

2.3 修改yaml 文件

2.4  执行yaml 文件

2.5 访问 redis

3, 用yaml 文件  k8s 运行mysql 的pod实例

3.1 报错分析

3.2 查看pod 日志

3.3 解决办法

 或者

3.4  修改yaml 文件

3.5 执行yaml 文件

3.6 进入mysql 的容器,用root 登录


一   k8s 支持的语言格式

Kubernetes 支持 YAML 和 JSON 格式管理资源对象
JSON 格式:主要用于 api 接口之间消息的传递
YAML 格式:用于配置和管理,YAML 是一种简洁的非标记性语言,内容格式人性化,较易读
 

1,YAML 语法格式

●大小写敏感
●使用缩进表示层级关系
●不支持Tab键制表符缩进,只使用空格缩进
●缩进的空格数目不重要,只要相同层级的元素左侧对齐即可,通常开头缩进两个空格
●符号字符后缩进一个空格,如冒号,逗号,短横杆(-)等
●“---”表示YAML格式,一个文件的开始,用于分隔文件间
●“#”表示注释
 

2,查看 api 资源版本标签

kubectl api-versions 命令帮助用户了解其 Kubernetes 集群所支持的 API 资源及版本范围,是管理和操作集群时的一个有用的信息参考点。

kubectl api-versions

如果是业务场景一般首选使用 apps/v1
带有beta字样的代表的是测试版本,不用在生产环境中

二   k8s 运行nginx pod实例  yaml文件 具体讲解

1,写一个yaml文件demo

mkdir /opt/demo
cd demo/

vim nginx-deployment.yaml

 

2,deployment 管理nginx 的yaml 文件

apiVersion: apps/v1		#指定api版本标签
kind: Deployment		#定义资源的类型/角色,deployment为副本控制器,此处资源类型可以是Deployment、Job、Ingress、Service等
metadata:					#定义资源的元数据信息,比如资源的名称、namespace、标签等信息
  name: nginx-deployment	#定义资源的名称,在同一个namespace空间中必须是唯一的
  labels:				#定义Deployment资源标签
    app: nginx	
spec:					#定义deployment资源需要的参数属性,诸如是否在容器失败时重新启动容器的属性
  replicas: 3			#定义副本数量
  selector:				#定义标签选择器
    matchLabels:		#定义匹配标签
      app: nginx		#需与 .spec.template.metadata.labels 定义的标签保持一致
  template:				#定义业务模板,如果有多个副本,所有副本的属性会按照模板的相关配置进行匹配
    metadata:
      labels:           #定义Pod副本将使用的标签,需与 .spec.selector.matchLabels 定义的标签保持一致
        app: nginx
    spec:
      containers:				#定义容器属性
      - name: nginx				#定义一个容器名,一个 - name: 定义一个容器
        image: nginx:1.15.4		#定义容器使用的镜像以及版本
        ports:
        - containerPort: 80		#定义容器的对外的端口

即我要指定暴露nginx的端口,就在yaml 文件中指定nodeport

3,创建资源对象

kubectl create -f nginx-deployment.yaml

4,查看创建的pod资源

kubectl get pods -o wide
NAME                              READY   STATUS    RESTARTS   AGE    IP            NODE            NOMINATED NODE
nginx-deployment-d55b94fd-29qk2   1/1     Running   0          7m9s   172.17.36.4   192.168.80.12   <none>
nginx-deployment-d55b94fd-9j42r   1/1     Running   0          7m9s   172.17.36.3   192.168.80.12   <none>
nginx-deployment-d55b94fd-ksl6l   1/1     Running   0          7m9s   172.17.26.3   192.168.80.11   <none>

5,创建service服务对外提供访问并测试

vim nginx-service.yaml
apiVersion: v1  
kind: Service  
metadata:
  name: nginx-service
  labels:
    app: nginx  
spec:
  type: NodePort  
  ports:
  - port: 80
    targetPort: 80  
  selector:
    app: nginx

6,创建service资源对象

kubectl create -f nginx-service.yaml 

7,查看创建的service

kubectl get svc
NAME            TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)        AGE
kubernetes      ClusterIP   10.0.0.1     <none>        443/TCP        16d
nginx-service   NodePort    10.0.0.119   <none>        80:35680/TCP   14s

8,验证结果

在浏览器输入 nodeIP:nodePort 即可访问

http://192.168.80.11:35680
http://192.168.80.12:35680

三   快速写yaml 文件方法

1,用 --dry-run 命令 创建但不执行

创建自主状态pod

kubectl run nginx-test --image=nginx --port=80 --dry-run=client

创建无状态pod

kubectl create deployment nginx-deploy --image=nginx --port=80 --replicas=3 --dry-run=client

2,  查看生成yaml格式

自主状态pod

kubectl run nginx-test --image=nginx --port=80 --dry-run=client -o yaml

无状态pod

kubectl create deployment nginx-deploy --image=nginx --port=80 --replicas=3 --dry-run=client -o yaml

3,  查看生成json格式

自主状态pod

kubectl run nginx-test --image=nginx --port=80 --dry-run=client -o json

无状态pod

kubectl create deployment nginx-deploy --image=nginx --port=80 --replicas=3 --dry-run=client -o json

4,  使用yaml格式导出生成模板

并进行修改以及删除一些不必要的参数

自主状态pod

kubectl run nginx-test --image=nginx --port=80 --dry-run=client -o yaml > nginx-test.yaml

无状态pod

kubectl create deployment nginx-deploy --image=nginx --port=80 --replicas=3 --dry-run=client -o yaml  > nginx-deploy.yaml

5,  将现有的资源生成模板导出

kubectl get svc nginx-service -o yaml

6,  保存到文件中

kubectl get svc nginx-service -o yaml > my-svc.yaml

7,  查看字段帮助信息,可一层层的查看相关资源对象的帮助信息

这个很重要,比如不知道deployment 的yaml 文件怎么写,可以输入 kubectl explain deployment

下面会提示你需要哪些信息

kubectl explain deployments.spec.template.spec.containers


或
kubectl explain pods.spec.containers

四    实战演练

1,用yaml 文件  k8s 运行nginx的pod实例

1.1 实验需求

1.2 创建命名空间
kubectl create ns my-ky35 --dry-run=client -o yaml  >nginx.yaml

1.3 创建pod 实例
kubectl run  my-nginx-ky35 --image=nginx:1.14  --port=80 --labels=njzb=my-ky35 --dry-run=client  -n my-ky35 -o yaml  >> nginx.yaml 
 
1.4 创建service
kubectl expose pod  my-nginx-ky35  --port=80 --target-port=80 --name=nginx01 --type=NodePort --dry-run=client  -n my-ky35  -o yaml  >>nginx.yaml 

tips: 此步骤 要先有命令空间   和  pod 实例

此步骤只是要 暴露端口的yaml语言

1.5  修改得到的yaml 文件
apiVersion: v1
kind: Namespace
metadata:
  creationTimestamp: null
  name: my-ky35
spec: {}
status: {}
---
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    njzb: my-ky35
  name: my-nginx-ky35
  namespace: my-ky35
spec:
  containers:
  - image: nginx:1.14
    name: my-nginx-ky35
    ports:
    - containerPort: 80
    resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}
---
apiVersion: v1
kind: Service
metadata:
  creationTimestamp: null
  labels:
    njzb: my-ky35
  name: nginx01
  namespace: my-ky35
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    njzb: my-ky35
  type: NodePort
status:
  loadBalancer: {}

tips:

1.6  执行yaml 文件
kubectl apply -f nginx.yaml 

1.7  查看结果

1.8 进容器 做页面
kubectl exec -it  my-nginx-ky35 -n my-ky35 bash

1.9 访问 nginx

2,  用yaml 文件  k8s 运行redis的pod实例 (指定暴露端口)

2.1 用deployment 控制器创造 redis 实例
kubectl create deployment my-redis-wyq --image=redis:latest  --port=6379  --dry-run=client  -n my-ky35 -o yaml  >> redis.yaml 

2.2 暴露端口
kubectl expose deployment  my-redis-wyq  --port=6379 --target-port=6379 --name=redis01 --type=NodePort --dry-run=client  -n my-ky35  -o yaml  >>redis.yaml 

注意:这边是创造的deployment

所以不论暴露端口还是  删除   都是指定deployment 名字

2.3 修改yaml 文件

在两个apiVersion: apps/v1 中间加 ---

在暴露端口的那段yaml 文件    指定命名空间

添加nodeport   指定暴露端口

apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: my-redis-wyq
  name: my-redis-wyq
  namespace: my-ky35
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-redis-wyq
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: my-redis-wyq
    spec:
      containers:
      - image: redis:latest
        name: redis
        ports:
        - containerPort: 6379
        resources: {}
status: {}
---
apiVersion: v1
kind: Service
metadata:
  creationTimestamp: null
  labels:
    app: my-redis-wyq
  name: redis01
  namespace: my-ky35
spec:
  ports:
  - port: 6379
    protocol: TCP
    nodePort: 32333
    targetPort: 6379
  selector:
    app: my-redis-wyq
  type: NodePort
status:
  loadBalancer: {}

2.4  执行yaml 文件
kubectl apply -f redis.yaml

2.5 访问 redis

连接redis  测试

3, 用yaml 文件  k8s 运行mysql 的pod实例

3.1 报错分析

和上述步骤一样时会报错。报错如下:

3.2 查看pod 日志

在master01 

查看日志

kubectl logs my-mysql-wyq-99f66bcc-dbjvf -n my-ky35

 

3.3 解决办法

可以通过设置 MYSQL_ROOT_PASSWORD 环境变量来指定 root 用户的密码

env:
- name: MYSQL_ROOT_PASSWORD
  value: "your_strong_password_here"
 或者

允许 root 用户密码为空

env:
- name: MYSQL_ALLOW_EMPTY_PASSWORD
  value: "yes"

3.4  修改yaml 文件

要修改的地方:

允许mysql 的root 密码为空

代码展示如下:

kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: my-mysql-wyq
  name: my-mysql-wyq
  namespace: my-ky35
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-mysql-wyq
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: my-mysql-wyq
    spec:
      containers:
      - image: mysql:latest
        name: mysql
        ports:
        - containerPort: 3306
        resources: {}
        env:
        - name: MYSQL_ALLOW_EMPTY_PASSWORD
          value: "yes"
status: {}
---
apiVersion: v1
kind: Service
metadata:
  creationTimestamp: null
  labels:
    app: my-mysql-wyq
  name: mysql01
  namespace: my-ky35
spec:
  ports:
  - port: 3306
    nodePort: 31111
    protocol: TCP
    targetPort: 3306
  selector:
    app: my-mysql-wyq
  type: NodePort
status:
  loadBalancer: {}

3.5 执行yaml 文件

3.6 进入mysql 的容器,用root 登录

mysql 准备好了

进入该pod
 

使用root 账户登录

举报

相关推荐

0 条评论