K8S中YAML案例

基本资源概念

Pod:k8s部署的最小单元,一组容器的集合
Deployment:最常见的控制器,用于更高级别部署和管理Pod
service:为一组Pod提供负载均衡,对外提供统一访问入口
Label:标签,附加到某个资源上,用于关联对象、查询和筛选
Namespaces:命名空间,将对象逻辑上隔离,也利于权限控制

Namespaces详解

命名空间(Namespaces):Kubernetes将资源对象逻辑上隔离,从而形成多个虚拟集群。

kubectl get namespaces

 1. default:默认命名空间
 2. kube-system:k8s系统方面的命名空间
 3. kube-public:公开的命名空间,任何人都可以访问
 4. kube-node-lease:k8s内部使用命名空间
[root@k8s-master ~]# kubectl get pod -n kube-system  #查看kube-system下命名空间跑了哪些资源
NAME                                      READY   STATUS    RESTARTS             AGE
calico-kube-controllers-7c845d499-jjs85   1/1     Running   5 (<invalid> ago)    10d
calico-node-jxxm2                         1/1     Running   13 (<invalid> ago)   10d
calico-node-p7qk9                         1/1     Running   5 (<invalid> ago)    10d
calico-node-t6r2p                         1/1     Running   5 (9h ago)           10d
coredns-6d8c4cb4d-4z796                   1/1     Running   5 (<invalid> ago)    10d
coredns-6d8c4cb4d-x2lcj                   1/1     Running   5 (<invalid> ago)    10d
etcd-k8s-master                           1/1     Running   5 (9h ago)           10d
kube-apiserver-k8s-master                 1/1     Running   8 (9h ago)           10d
kube-controller-manager-k8s-master        1/1     Running   6 (9h ago)           10d
kube-proxy-99p25                          1/1     Running   12 (<invalid> ago)   10d
kube-proxy-grlpg                          1/1     Running   5 (<invalid> ago)    10d
kube-proxy-xhbh8                          1/1     Running   5 (9h ago)           10d
kube-scheduler-k8s-master                 1/1     Running   6 (9h ago)           10d

命名空间命令

kubectl get namespaces	#查看所有命名空间
kubectl create namespace shop	#创建名为shop的命名空间
kubectl create deployment java-test --image=test/java-test -n shop	#指定创建的资源到哪个命名空间下面
kubectl get pods -n shop	#查看shop下有哪些资源
kubectl delete ns xx	#k8s强制删除命名空间,会将此命名空间下的资源一起删除

查看target-port端口

kubectl get endpoints

查看资源标签命令:

[root@k8s-master ~]# kubectl get pods --show-labels
NAME   READY   STATUS    RESTARTS            AGE     LABELS
web    2/2     Running   5 (<invalid> ago)   6d23h   run=web
web1   2/2     Running   5 (<invalid> ago)   6d22h   run=web1
[root@k8s-master ~]# kubectl get pods -l run=web1 #根据标签过滤资源
NAME   READY   STATUS    RESTARTS            AGE
web1   2/2     Running   5 (<invalid> ago)   6d22h

YAML资源编排

YAML文件格式说明

k8s是一个容器编排引擎,使用YAML文件编排部署应用。

  1. 缩进表示层级关系
  2. 不支持制表符"tab"缩进,使用空格缩进
  3. 通常开头缩进2个空格
  4. 字符后缩进1个空格,如冒号、逗等
  5. “—” 表示YAML格式,一个文件的开始
  6. “#” 表示注释

查看资源版本信息

kubectl api-resources
NAME                              SHORTNAMES   APIVERSION                             NAMESPACED   KIND
bindings                                       v1                                     true         Binding
componentstatuses                 cs           v1                                     false        ComponentStatus
configmaps                        cm           v1                                     true         ConfigMap
endpoints                         ep           v1                                     true         Endpoints
events                            ev           v1                                     true         Event
limitranges                       limits       v1                                     true         LimitRange

YAML文件导出

kubectl create deployment java-test --image=test/java-test -n shop --dry-run=client -o yaml > deployment.yaml  #用create命令生成
kubectl get deployment 容器资源名称 -o yaml > my-deploy.yaml	#用get命令导出
kubectl apply -f xxx.yaml	#部署
kubectl delete -f xxx.yaml	#卸载

案例

1、新建一个命名空间,在空间内创建一个pod
2、新建一个deployment并暴露service,能在浏览器中访问
3、列出命名空间下指定的标签

kubectl create namespace shopping	#新建一个名为shopping的命名空间
kubectl create deployment xxx --image=nginx -n shopping	#在shopping空间内建立了一个xxx的nginx镜像
kubectl get pod -n shopping
------------------
vim 1.yaml		# deployment的配置文件、

apiVersion: apps/v1		# 版本信息 
kind: Deployment
metadata:
  name: xx		#名字自己选择,没有要求
  namespace: shopping	# 指定命名空间
spec:
  replicas: 2		#启动多少个副本数
  selector:
    matchLabels:	# matchLabels中的project和app必须和labels下的一样,否则会报错
      project: xxx
      app: xxx
  template:
    metadata:
      labels:			# 标签
        project: xxx
        app: xxx
    spec:
      containers:
      - image: nginx	#服务名字
        name: xx	
----------
vim 2.yaml

apiVersion: v1
kind: Service
metadata:
  name: xx
  namespace: shopping
spec:
  ports:
  - port: 8888		# service端口,供内部使用
    protocol: TCP
    targetPort: 80	#容器内服务运行的端口
  selector:		# 这下面的标签信息要和deployment配置文件中的project和app信息一
    project: xxx
    app: xxx
  type: NodePort	#service类型,将pod暴露给集群外部访问
---------
[root@k8s-master ~]# kubectl apply -f 1.yaml
[root@k8s-master ~]# kubectl apply -f 2.yaml
[root@k8s-master ~]# kubectl get pod,service -n shopping
NAME                        READY   STATUS    RESTARTS   AGE
pod/xxx-6d45d94dbf-595x7   1/1     Running   0          57m
pod/xxx-6d45d94dbf-sx6v4   1/1     Running   0          57m

NAME            TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
service/nginx   NodePort   10.110.238.209   <none>        8888:32368/TCP   25m

2种访问:	(内部访问)
1、curl 10.110.238.209:8888
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

2、(任意节点上+随机端口)
[root@k8s-master ~]# curl 192.168.153.182:32368
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>
---------
[root@k8s-master ~]# kubectl get pod,service -n shopping -o wide --show-labels   #查看指定的命名空间内标签信息
NAME                        READY   STATUS    RESTARTS   AGE   IP               NODE        NOMINATED NODE   READINESS GATES   LABELS
pod/xiao
-6d45d94dbf-595x7   1/1     Running   0          94m   10.244.36.102    k8s-node1   <none>           <none>            app=gateway,pod-template-hash=6d45d94dbf,project=qmyx
pod/xiao-6d45d94dbf-sx6v4   1/1     Running   0          94m   10.244.169.177   k8s-node2   <none>           <none>            app=gateway,pod-template-hash=6d45d94dbf,project=qmyx

NAME            TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE   SELECTOR                   LABELS
service/nginx   NodePort   10.110.238.209   <none>        8888:32368/TCP   62m   app=gateway,project=qmyx   <none>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值