(七)k8s---yaml文件,image,node选择器,selector
使用之前打的标签 GF=IT需要提前创建好yaml文件,并创建好好pod运行所需要的namespace、yaml文件等资源apiVersion - 创建该对象所使用的 Kubernetes API 的kind - 想要,之后可以通过Label Selector(标签选择器)查询和筛选拥有某些Label的资源对象metadata - 帮助识别对象,包括一个 name 名称可选的 namespace启
- 使用
nodeSelector
指定 pod 调度到具有哪些标签的 node 节点上
使用之前打的标签 GF=IT
需要提前创建好yaml文件,并创建好好pod运行所需要的namespace、yaml文件等资源
-
apiVersion - 创建该对象所使用的 Kubernetes API 的
版本
-
kind - 想要
创建的对象的类型
,之后可以通过Label Selector(标签选择器)查询和筛选拥有某些Label的资源对象 -
metadata - 帮助识别对象
唯一性的数据
,包括一个 name 名称
可选的 namespace
- spec 定义容器信息
启动几个pod,用的是控制器,RS,deployment
spec:
replicas: 1
- status(Pod创建完成后k8s
自动生成status状态
)
yaml文件及必需字段
每个API对象都有3大类属性:元数据metadata、规范spec和状态status。
spec和status的区别:
spec是期望状态
status是实际状态
pwd /opt/k8s-data/yaml/
mkdir namespaces linux36
cd namespaces
cat linux36.yaml
apiVersion: v1 #API版本
kind: Namespace #类型为namespac
metadata: #定义元数据
name: linux36 #namespace名称
可以使用kubectl explain namespace
查看版本信息
创建并验证namespace
kubectl apply -f linux36.yaml
namespace/linux36 created
kubectl get namespaces
NAME STATUS AGE d
efault Active 21d
kube-public Active 21d
kube-system Active 21d
linuxqcq Active 45s
再web界面查看在etcd
中查看到
yaml和json对比,
在线yaml与json编辑器:http://www.bejson.com/validators/yaml_editor/
json格式
{ ‘人员名单’:
{ ‘张三’: { ‘年龄’: 18, ‘职业’: ‘Linux运维工程师’, ‘爱好’: [ ‘看书’, ‘学习’, ‘加班’ ] },
‘李四’: { ‘年龄’: 20, ‘职业’: ‘Java开发工程师’, ‘爱好’: [ ‘开源技术’, ‘微服务’, ‘分布式存 储’ ] } }
}
json特点:
json 不能注释
json 可读性较差
json 语法很严格
比较适用于API 返回值
,也可用于配置文件
yaml格式
yaml文件主要特性:
k8s中的yaml文件以及其他场景的yaml文件,大部分都是以下类型
`
-
表示列表 ,可以有多个
分隔符
#test-pod
apiVersion: v1 #指定api版本,此值必须在kubectl apiversion中
kind: Pod #指定创建资源的角色/类型
metadata: #资源的元数据/属性
name: test-pod #资源的名字,在同一个namespace中必须唯一
labels: #设定资源的标签
k8s-app: apache
version: v1
kubernetes.io/cluster-service: “true”
annotations: #自定义注解列表
- name: String #自定义注解名字
spec: #specification of the resource content 指定该资源的内容
restartPolicy: Always #表明该容器一直运行,默认k8s的策略,在此容器退出后,会立即创建一个相同的容器
nodeSelector: #节点选择,先给主机打标签kubectl label nodes kube-node1 zone=node1
zone: node1
containers:
- name: test-pod #容器的名字
image: 10.192.21.18:5000/test/chat:latest #容器使用的镜像地址
imagePullPolicy: Never #三个选择Always、Never、IfNotPresent,每次启动时检查和更新(从registery)images的策略,
Always,每次都检查
Never,每次都不检查(不管本地是否有)
IfNotPresent,如果本地有就不检查,如果没有就拉取
command: [‘sh’] #启动容器的运行命令,将覆盖容器中的Entrypoint,对应Dockefile中的ENTRYPOINT
args: [“$(str)”] #启动容器的命令参数,对应Dockerfile中CMD参数
env: #指定容器中的环境变量
- name: str #变量的名字
value: “/etc/run.sh” #变量的值
resources: #资源管理
requests: #容器运行时,最低资源需求,也就是说最少需要多少资源容器才能正常运行
cpu: 0.1 #CPU资源(核数),两种方式,浮点数或者是整数+m,0.1=100m,最少值为0.001核(1m)
memory: 32Mi #内存使用量
limits: #资源限制
cpu: 0.5
memory: 1000Mi
ports:
- containerPort: 80 #容器开发对外的端口
name: httpd #名称
protocol: TCP
livenessProbe: #pod内容器健康检查的设置
httpGet: #通过httpget检查健康,返回200-399之间,则认为容器正常
path: / #URI地址
port: 80
#host: 127.0.0.1 #主机地址
scheme: HTTP
initialDelaySeconds: 180 #表明第一次检测在容器启动后多长时间后开始
timeoutSeconds: 5 #检测的超时时间
periodSeconds: 15 #检查间隔时间
#也可以用这种方法
#exec: 执行命令的方法进行监测,如果其退出码不为0,则认为容器正常
command:
- cat
- /tmp/health
#也可以用这种方法
#tcpSocket: //通过tcpSocket检查健康
port: number
lifecycle: #生命周期管理
postStart: #容器运行之前运行的任务
exec:
command:
-
‘sh’
-
‘yum upgrade -y’
preStop:#容器关闭之前运行的任务
exec:
command: [‘service httpd stop’]
volumeMounts: #挂载持久存储卷
- name: volume #挂载设备的名字,与volumes[*].name 需要对应
mountPath: /data #挂载到容器的某个路径下
readOnly: True
volumes: #定义一组挂载设备
- name: volume #定义一个挂载设备的名字
#meptyDir: {}
hostPath:
path: /opt #挂载设备类型为hostPath,路径为宿主机下的/opt,这里设备类型支持很多种
#nfs
创建Nginx pod 并测试通过node port访问
Nginx yaml文件:
root@k8s-master1:/opt/k8s-data/yaml/linux36/nginx# cat nginx.yaml
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
labels:
app: linux36-nginx-deployment-label
name: linux36-nginx-deployment
namespace: linux36
spec:
replicas: 1
selector:
matchLabels:
app: linux36-nginx-selector
template:
metadata:
labels:
app: linux36-nginx-selector
spec:
containers:
- name: linux36-nginx-container
image: harbor.magedu.net/linux36/nginx-web1:v1
#command: [“/apps/tomcat/bin/run_tomcat.sh”]
#imagePullPolicy: IfNotPresent
imagePullPolicy: Always
ports:
- containerPort: 80
protocol: TCP
name: http
- containerPort: 443
protocol: TCP
name: https
env:
- name: “password”
value: “123456”
- name: “age”
value: “18”
resources:
limits:
cpu: 2
memory: 2Gi
requests:
cpu: 500m
memory: 1Gi
kind: Service
apiVersion: v1
metadata:
labels:
app: linux36-nginx-service-label
name: linux36-nginx-service
namespace: linux36
spec:
type: NodePort
ports:
- name: http
port: 80
protocol: TCP
targetPort: 80
nodePort: 30002
- name: https
port: 443
protocol: TCP
targetPort: 443
nodePort: 30443
selector:
app: linux36-nginx-selector
创建Nginx pod:
kubectl apply -f nginx.yaml
deployment.extensions/linux36-nginx-deployment created
service/linux36-nginx-spec created
测试访问Nginx web界面
基于基础的centos镜像,制作公司内部基础镜像–jdk镜像–tomcat基础镜像–tomcat业务镜像:
JDK基础镜像制作
Dockerfile文件
打镜像脚本
验证JDK镜像启动为容器后的java环境
tomcat基础镜像制作
测试访问tomcat基础镜像启动为容器
创建tomcat业务pod
pwd
/opt/k8s-data/yaml/linux36/tomcat-app1
kubectl apply -f tomcat-app1.yaml
验证pod启动成功
实现一个通用的nginx+tomcat动静分离web架构,即用户访问的静态页面和图片在由nginx直接响应,而动态请求则基于location转发至tomcat
。
Nginx基于tomcat的service name转发用户请求到tomcat业务app
nginx配置文件
重新构建nginx业务镜像
bash build-command.sh
镜像启动为容容器并验证配置文件
重新创建业务nginx pod
删除并重新创建nginx业务镜像
更新nginx业务镜像版本号
重新构建新版本镜像,然后打一个新的tag号,然后通过指定镜像的方式对pod进行更新
准备新版本nginx业务镜像
获取当前deployment
执行更新nginx业务镜像版本
web访问测试------通过nginx访问到tomcat的app项目
=================================================================================
环境
NFS客户端挂载并测试写入文件
cat nginx.yaml
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
labels:
app: linux36-nginx-deployment-label
name: linux36-nginx-deployment
namespace: linux36
spec:
replicas: 1
selector:
matchLabels:
app: linux36-nginx-selector
template:
metadata:
labels:
app: linux36-nginx-selector
spec:
containers:
- name: linux36-nginx-container
image: harbor.magedu.net/linux36/nginx-web1:v1
#command: [“/apps/tomcat/bin/run_tomcat.sh”]
#imagePullPolicy: IfNotPresent
imagePullPolicy: Always
ports:
- containerPort: 80
protocol: TCP
name: http
- containerPort: 443
protocol: TCP
name: https
env:
- name: “password”
value: “123456”
刷面试题
刷题的重要性,不用多说。对于应届生或工作年限不长的人来说,刷面试题一方面能够尽可能地快速自己对某个技术点的理解,另一方面在面试时,有一定几率被问到相同或相似题,另外或多或少也能够为自己面试增加一些自信心,可见适当的刷题是很有必要的。
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
-
前端字节跳动真题解析
-
【269页】前端大厂面试题宝典
最后平时要进行自我分析与评价,做好职业规划,不断摸索,提高自己的编程能力和抽象思维能力。大厂面试远没有我们想的那么困难,摆好心态,做好准备,你也可以的。
更多推荐
所有评论(0)