k8s操作命令
### 环境准备:关闭防火墙和安全机制,还有Iptables规则服务
systemctl stop firewalld
systemctl disable firewalld
systemctl stop iptables
systemctl disable iptables
setenforce 0
sed -i 's/SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
### 查看到初始化需要的镜像
kubeadm config images list
### 上传指定目录内的所有压缩包镜像
for i in $(ls /opt/1/*.tar); do docker load -i $i; done
### 删除所有docker镜像
docker rmi $(docker images | awk '{if(NR!=1) print $3}')
### 查看所有节点
kubectl get nodes
### 查看指定 node01 节点的详细信息状态:CPU,内存等
kubectl describe node node01
### 删除指定 node01 节点的标签:worker
kubectl label nodes node01 node-role.kubernetes.io/worker=
### 给指定 node01 节点打上标签:添加标签:
kubectl label nodes node01 node-role.kubernetes.io/worker-
### 通过yml脚本导入镜像
kubectl apply -f kube-flannel.yml
### 查看指定命名空间的pod
kubectl get pods -n kube-system
### 测试:创建pod资源
kubectl create deployment nginx --image=nginx
### 查看pod状态
kubectl get pods -o wide
### 暴露端口,提供服务,测试访问:curl http://node01:30080
kubectl expose deployment nginx --port=80 --type=NodePort
### 新增三个副本:
kubectl scale deployment nginx --replicas=3
kubectl get pods -o wide
### 删除命名空间ygb中的指定pod
kubectl delete deployment http -n ygb
命名空间
命名空间适用于存在很多跨多个团队或项目的用户的场景。
命名空间为名称提供了一个范围。资源的名称需要在命名空间内是唯一的,但不能跨命名空间。命名空间不能相互嵌套,每个 Kubernetes 资源只能在一个命名空间中。
命名空间是在多个用户之间划分集群资源的一种方法(通过资源配额)。
相同命名空间中的对象默认将具有相同的访问控制策略。
不需要使用多个命名空间来分隔轻微不同的资源,例如同一软件的不同版本:使用 labels 来区分同一命名空间中的不同资源。
### 三个初始化命名空间
default 没有其他名称空间的对象的默认名称空间。
kube-system Kubernetes系统创建的对象的名称空间。
kube-public该名称空间是自动创建的,并且对所有用户(包括未经身份验证的用户)可读。此名称空间主要保留给集群使用,以防某些资源在整个集群中公开可见。此名称空间的公共方面仅是约定,不是要求。
### 查看命名空间详细状态信息
kubectl describe namespaces default
查看指定命名空间的pod
kubectl get pods -n kube-system
查看命名空间
kubectl get namespaces default
pod, service, deployment 等都是属于某一个namespace的(默认是 default)
default:所有未指定 Namespace的对象都会被默认分配在default命名空间
kube-public :此命名空间下的资源 可以被所有人访问
kube-system :所有由Kubernetes 系统创建的资源都处于这个命名空间
不是所有资源都属于namespace,如nodes, persistent volume, namespace 等资源则不属于任何 namespace
使用kubectl get all --namespace=命名空间名称可以查看此命名空间 下的所有资源
kubectl get pod --namespace=kube-system 创建命名空间:kubectl create namespace ns1、kubectl get ns
kubectl get all --namespace=kube-system
YAML文件创建命名空间
k8s中几乎所有的资源都可以通这YAML编排来创建
可以使用kubectl edit 资源类型 资源名编辑资源的YAML语法
kubectl edit namespace ns1
# Please edit the object below. Lines beginning with a '#' will be ignored,
# and an empty file will abort the edit. If an error occurs while saving this file will be
# reopened with the relevant failures.
#
apiVersion: v1
kind: Namespace
metadata:
creationTimestamp: "2021-02-08T14:55:00Z"
name: ns1 #此处修改
resourceVersion: "17578"
selfLink: /api/v1/namespaces/ns1
uid: 9dfae471-6a1d-11eb-9a72-000c2936bb86
spec:
finalizers:
- kubernetes
status:
phase: Active
使用kubectl get 资源类型 资源名 -o yaml来查看
kubectl get ns ns1 -o yaml
kubectl explain 资源类型来查看语法文档:kubectl explain namespace
查看namespace下级metadata的相关语法参数:kubectl explain namespace.metadata
查看namespace下级metadata再下级name的相关语法参数:kubectl explain namespace.metadata.name
编写创建namespace的YAML文件:vim create_ns2.yml
apiVersion: v1 # api版本号
kind: Namespace # 类型为namespace
metadata: # 定义namespace的元 数据属性
name: ns2 # 定义name属性为ns2
labels:
name: ywm
使用kubctl apply -f应用YAML文件:kubectl apply -f create_ns2.yml
删除一个namespace会自动删除所有属于该namespace的资源(类似 mysql中drop库会删除库里的所有表一样,请慎重操作)
default,kube-system,kube-public命名空间不可删除
kubectl delete namespace ns1
YAML文件删除:kubectl delete -f create_ns2.yml
### 在指定命名空间上部署应用
kubectl describe deployment demo-nginx --namespace=ywm |grep Namespace
kubectl create deployment --image nginx demo-nginx --namespace=ywm
### context没有指定命名空间,因此使用了默认命名空间。查看。
kubectl config get-contexts
### 修改context命名空间
kubectl config set-context $(kubectl config current-context) --namespace=ywm
### kubectl describe命令现在默认使用demo-namespace,不需要指定命名空间
kubectl describe deployment demo-nginx|grep Namespace
### 删除命名空间,其中资源也会一起删除
kubectl get all --namespace=ywm
kubectl delete namespace ywm
### 初始化命名空间
kubectl delete namespace ywm
### 删除部署的资源
kubectl delete deployment demo-nginx
### 在master节点上删除之前创建的nginx资源
kubectl delete deployment nginx
### 不存在的资源,直接拉取,创建pod并运行
kubectl run nginx-deployment --image=192.168.80.40/library/nginx:v1 --port=80 --replicas=3
### 暴露端口,提供服务
kubectl expose deployment nginx-deployment --port=30000 --target-port=80
kubectl get svc,pods
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 10m
service/nginx-deployment ClusterIP 10.96.222.161 <none> 30000/TCP 3m15s
NAME READY STATUS RESTARTS AGE
pod/nginx-deployment-77bcbfbfdc-bv5bz 1/1 Running 0 16s
pod/nginx-deployment-77bcbfbfdc-fq8wr 1/1 Running 0 16s
pod/nginx-deployment-77bcbfbfdc-xrg45 1/1 Running 0 3m39s