【K8S基础】02 基本操作
目录1. 客户端工具 kubectl1.1. 基本命令1.2. 命令详解2. NameSpace 命名空间2.1. 用途2.2. 基本命令3. Pod3.1. 概述3.2. 基本命令4. Controller4.1. 概述4.2. Deployment控制器5. service5.1. 概述5.2. 基本命令1. 客户端工具 kubectl参考:Kubernetes Doc(官方)Kubernet
·
目录
1. 客户端工具 kubectl
参考:
视频教程:
1.1. 基本命令
-
准备:
# 检查kubectl是否安装 rpm -qa | grep kubectl # 查看 帮助 kubectl --help # 环境准备 在master worker所有节点上面, 用户的家目录下面 创建 .kube scp master1:/root/.kube/config .kube/ # config文件来自于master节点 /etc/ 目录下 cp /etc/kubernetes/admin.conf ./.kube/config
-
子命令 汇总:
1.2. 命令详解
2. NameSpace 命名空间
2.1. 用途
- 用途:
- 在 k8s 集群中运行两套环境, 实现开发测试与预发布环境的隔离;
- 多租户 情况下, 实现资源隔离;
- 属于 逻辑隔离;
- 属于 管理边界;
- 不属于 网络边界;
- 可以针对每个namespace做资源分配;
2.2. 基本命令
-
基本命令:
# == 查看 NameSpace == kubectl get namespace kubectl get ns # 简写 default 用户创建的pod默认在此命名空间 kube-public 所有用户均可以访问,包括未认证用户 kube-node-lease kubernetes集群节点租约状态 v1.13加入 kube-system kubernetes集群在使用 # == 创建 NameSpace == # kubectl 创建 [root@k8s-master1 ~]# kubectl create namespace test namespace/test created # yaml 文件创建 cat 01-create-ns.yaml #具体文件内容见后面 kubectl apply -f 01-create-ns.yaml # 应用文件 # == 删除 NameSpace == 删除namespace时, 其中所包含的所有资源都会被删除; # kubectl 命令删除 [root@k8s-master1 yamldir]# kubectl delete namespace test namespace "test" deleted # 调用api, 执行速度较慢; # yaml文件删除 [root@k8s-master1 yamldir]# kubectl delete -f 01-create-ns.yaml namespace "demons1" deleted
-
yaml文件
# 01-create-ns.yaml apiVersion: v1 kind: Namespace metadata: name: demons1 #
3. Pod
3.1. 概述
-
理解
- pod: 豆荚;
- docker: 豆粒;
- pod 是k8s集群中最小调度单元;
- Pod 是容器的封装;
-
概述:
3.2. 基本命令
-
基本命令:
# == 查看Pod方法 == # 查看 default namespace中的Pod kubectl get pod kubectl get pods No resources found in default namespace. # 指定namespace kubectl get pod --namespace default kubectl get pods --namespace default kubectl get pod -n kube-system #-n # 查看pod详细信息 kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES pod1 1/1 Running 0 3m27s 10.224.194.65 k8s-worker1 <none> <none> # == 创建Pod == # yaml创建pod kubectl apply -f 02-create-pod.yaml kubectl apply -f 02-create-pod.yaml # 应用命令 pod/pod1 created # == Pod访问 == curl http://172.16.1.2 #指定ip # == Pod删除 == # 命令删除 kubectl delete pods pod1 # yaml文件 kubectl delete -f 02-create-pod.yaml
-
相关 yaml文件
#02-create-pod.yaml apiVersion: v1 kind: Pod metadata: name: pod1 spec: containers: - name: nginx-pod image: nginx:latest ports: - name: nginxport containerPort: 80
4. Controller
4.1. 概述
-
作用:
- k8s集群中以loop方式监控Pod状态;
- 若发现 pod 被删除, 重新拉起一个pod, 以保证pod处于用户期望状态;
-
分类:
4.2. Deployment控制器
-
概述
- 具有上线部署、滚动升级、创建副本、回滚到以前某一版本(成功/ 稳定)等功能;
- Deployment包含ReplicaSet,除非需要自定义升级功能或者根本不需要升级Pod,
否则还是建议使用Deployment而不直接使用Replica Set 。
-
基本命令:
# == 创建控制器 == # 命令行创建 kubectl run nginx-app --image=nginx:latest --image-pull-policy=IfNotPresent --replicas=2 # nginx-app 是deployment控制器类型的应用名称 # nginx:latest 是所使用的镜像; # --replicas=2 指运行的pod共有2个副本; # 是 用户的期望值,Deployment控制器中的ReplicaSet控制器会 一直监控此应用运行的Pod副本状态, #如果数量达不到用户期 望,就会重新拉起一个新的Pod,会让Pod数量一直维持在用户期望值数量。 # yaml文件 kubectl apply -f 03-creat- deployment-app.yaml # == 查看 == # 查看 deployment 控制器类型 [root@k8s-master1 ~]# kubectl get deployment.apps NAME READY UP-TO-DATE AVAILABLE AGE nginx-app 2/2 2 2 102s # 查看 replicaset 控制器类型 kubectl get replicaset # == 删除控制器 == 带有控制器类型的Pod不能随便删除,如果必须删除,请删除控制器类型的应用名称。 # 命令行 kubectl delete deployment.apps nginx-app # yaml文件 kubectl delete -f 03-creat- deployment-app.yaml
-
相关yaml:
# 03-create-deployment-app.yaml apiVersion: apps/v1 kind: Deployment metadata: name: nginx-apps labels: app: nginx spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginxapp image: nginx:latest imagePullPolicy: IfNotPresent ports: - containerPort: 80
5. service
5.1. 概述
-
概述:
- 不是实体服务;
- 是一条 iptables或ipvs 的转发规则;
-
作用:
- 为 pod 客户端提供访问pod的方法, 即客户端访问pod入口 ;
- 通过 pod标签 与pod进行关联;
-
分类:
- ClusterIP
默认,分配一个集群内部可以访问的虚拟IP - NodePort
在每个Node上分配一个端口作为外部访问入口 - LoadBalancer
工作在特定的Cloud Provider上,例如Google Cloud,AWS,OpenStack - ExternalName
表示把集群外部的服务引入到集群内部中来,即实现了集群内部pod和集群外部的服务进行通信;
- ClusterIP
-
参数说明:
port 访问service的端口 targetPort Pod中容器端口 NodePort 通过Node实现外网用户访问k8s集群内service(30000-32767)
5.2. 基本命令
-
基本命令
# == 创建service == # 命令行 默认创建service ClusterIP类型 # 创建 deployment应用 kubectl run nginx-app --image=nginx:latest --image-pull-policy=IfNotPresent --replicas=1 # 创建service kubectl expose deployment.apps nginx-app --type=ClusterIP --target-port=80 --port=80 # 参数: expose 创建service deployment.apps 控制器类型 nginx-app 应用名称,也是service名称 --type=ClusterIP 指定service类型 --target-port=80 指定Pod中容器端口 --port=80 指定service端口 # yaml文件 kubectl apply -f create-deployment-service-nodeport.yaml # == 访问service == kubectl get service # 验证对象创建 # 查看k8s集群所有主机30001端口监听状态 ss -anput | grep ":30001" # 在物理浏览器中验证: # == 删除 service == kubectl delete service nginx-app kubectl delete -f create- deployment-service-clusterip.yaml
-
相关yaml
--- apiVersion: apps/v1 kind: Deployment metadata: name: nginx-app-nodeport labels: apps: nginx-app4 spec: replicas: 2 selector: matchLabels: apps: nginx-app4 template: metadata: labels: apps: nginx-app4 spec: containers: - name: nginxapp4 image: nginx:latest imagePullPolicy: IfNotPresent ports: - containerPort: 80 --- apiVersion: v1 kind: Service metadata: name: nginx-app4-svc spec: selector: apps: nginx-app4 type: NodePort ports: - protocol: TCP nodePort: 30001 port: 80 targetPort: 80
更多推荐
已为社区贡献2条内容
所有评论(0)