基础控制指令
# 查看对应资源: 状态
$ kubectl get <SOURCE_NAME> -n <NAMESPACE> -o wide
查看默认命名空间的pod
[root@k8s-master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx 1/1 Running 0 3h53m
查看所有pod
[root@k8s-master ~]# kubectl get pod -A
NAMESPACE NAME READY STATUS RESTARTS AGE
cloud2304 mysql 1/1 Running 0 3h40m
default nginx 1/1 Running 0 3h53m
kube-system calico-kube-controllers-7c87c5f9b8-cbh9g 1/1 Running 5 (5h56m ago) 28h
kube-system calico-node-7m5tq 1/1 Running 3 (7h53m ago) 28h
kube-system calico-node-bth4k 1/1 Running 3 (7h53m ago) 28h
kube-system calico-node-zp4tx 1/1 Running 3 (7h53m ago) 28h
查看指定命名空间的pod
kubectl get pod -n +命名空间名字
删除pod
kubectl delete pod --force +pod名字 -n +命名空间
默认查看到的命名空间是default,修改上下文关系,让查看到的是其他命名空间的pod
#修改默认命名空间为kuboard
[root@k8s-master ~]# kubectl config set-context --current --namespace kuboard
Context "kubernetes-admin@kubernetes" modified.
[root@k8s-master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
kuboard-agent-2-5cdbd5bb5d-zzr9s 1/1 Running 0 5h44m
kuboard-agent-54dbdc497d-qr2zl 1/1 Running 1 (5h43m ago) 5h44m
kuboard-etcd-f99qg 1/1 Running 0 7h57m
kuboard-questdb-7cfc9cc858-tnhcz 1/1 Running 0 5h44m
kuboard-v3-5fc46b5557-fwsds 1/1 Running 0 7h57m
#将默认命名空间改回default
[root@k8s-master ~]# kubectl config set-context --current --namespace default
Context "kubernetes-admin@kubernetes" modified.
[root@k8s-master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx 1/1 Running 0 3h42m
动态查看pod
NAMESPACE NAME READY STATUS RESTARTS AGE
cloud2304 mysql 1/1 Running 0 3h42m
default nginx 1/1 Running 0 3h54m
kube-system calico-kube-controllers-7c87c5f9b8-cbh9g 1/1 Running 5 (5h57m ago) 28h
kube-system calico-node-7m5tq 1/1 Running 3 (7h54m ago) 28h
查看节点
[root@k8s-master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master Ready control-plane,master 28h v1.22.0
k8s-node1 Ready <none> 28h v1.22.0
k8s-node2 Ready <none> 28h v1.22.0
# 查看对应资源: 事件信息
$ kubectl describe <SOURCE_NAME> <SOURCE_NAME_RANDOM_ID> -n <NAMESPACE>
这个就好比容器的信息inspect
查看pod信息,主要用于排错用,重要的是查看文件的Events信息
kubectl describe pod -n +命名空间名字 +pod名字
[root@k8s-master ~]# kubectl describe pod -n kube-system kube-proxy-k7zrz
Name: kube-proxy-k7zrz
Namespace: kube-system
Priority: 2000001000
Priority Class Name: system-node-critical
Node: k8s-node2/192.168.231.136
Start Time: Mon, 11 Dec 2023 16:09:59 +0800
Labels: controller-revision-hash=55847b5bbd
k8s-app=kube-proxy
pod-template-generation=1
....
# 查看pod资源: 日志
$ kubectl logs -f <SOURCE_NAME_RANDOM_ID> [CONTINER_NAME] -n <NAMESPACE>
看pod日志,只有pod有日志
kubectl logs +pod名字 -n +命名空间名字
[root@k8s-master ~]# kubectl logs kuboard-agent-2-5cdbd5bb5d-zzr9s -n kuboard
KuboardEndpoint : http://kuboard-v3
KuboardAgent : kcp://kuboard-v3:10081
KUBOARD_AGENT_PROXY :
KUBOARD_AGENT_KEY : 32b7d6572c6255211b4eec9009e4a816
KUBOARD_K8S_CLUSTER_NAME : default
KUBOARD_ANONYMOUS_TOKEN : pAMXXJ6vfee3CkEyEHVYTxsOtWCplcq6
KUBOARD_AGENT_REMOTE_PORT_NGINX: 45001
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 263 100 263 0 0 16437 0 --:--:-- --:--:-- --:--:-- 16437
# 创建资源: 根据资源清单
$ kubectl apply[or create] -f <SOURCE_FILENAME>.yaml
apply 与create都是运行某些文件
create只能运行第一次,再次运行就会报错
apply可以运行多次,后面运行还会帮你更行
# 删除资源: 根据资源清单
$ kubectl delete -f <SOURCE_FILENAME>.yaml
这些文件定义过的内容全部删除
kubectl delete -f xxxx.yaml
# 修改资源: 根据反射出的etcd中的配置内容, 生产中不允许该项操作, 且命令禁止
$ kubectl edit <SOURCE_NAME> <SOURCE_NAME_RANDOM_ID> -n <NAMESPACE>
edit是更新,编辑的意思
[root@k8s-master ~]# kubectl get pod -A
NAMESPACE NAME READY STATUS RESTARTS AGE
cloud2304 mysql 1/1 Running 0 4h
default nginx 0/1 Running 0 28h
可以进行更新
kubectl edit daemonsets.apps pod名字 -n 命名空间名字
即可自动更新,因为k8s更新是滚动更新
查看node状态
以什么形式查看
#查看node详细信息
[root@k8s-master ~]# kubectl get node -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
k8s-master Ready control-plane,master 28h v1.22.0 192.168.231.134 <none> CentOS Linux 7 (Core) 3.10.0-1160.el7.x86_64 docker://24.0.7
k8s-node1 Ready <none> 28h v1.22.0 192.168.231.135 <none> CentOS Linux 7 (Core) 3.10.0-1160.el7.x86_64 docker://24.0.7
k8s-node2 Ready <none> 28h v1.22.0 192.168.231.136 <none> CentOS Linux 7 (Core) 3.10.0-1160.el7.x86_64 docker://24.0.7
以yaml形式查看
[root@k8s-master ~]# kubectl get pod -o yaml
apiVersion: v1
items:
- apiVersion: v1
kind: Pod
metadata:
annotations:
cni.projectcalico.org/containerID: 27935188fd58c9ec77febe8af14bbb1e507c1cb67da0e202c317c380c43da75c
cni.projectcalico.org/podIP: 10.244.169.129/32
cni.projectcalico.org/podIPs: 10.244.169.129/32
kubectl.kubernetes.io/last-applied-configuration: |
...
以json形式查看
[root@k8s-master ~]# kubectl get node -o json
{
"apiVersion": "v1",
"items": [
{
"apiVersion": "v1",
"kind": "Node",
"metadata": {
"annotations": {
"kubeadm.alpha.kubernetes.io/cri-socket": "/var/run/dockershim.sock"
...
查看service对象
[root@k8s-master ~]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 28h
查看集群信息
[root@k8s-master ~]# kubectl cluster-info
Kubernetes control plane is running at https://192.168.231.134:6443
CoreDNS is running at https://192.168.231.134:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
查看各组件信息
[root@k8s-master ~]# kubectl get cs
Warning: v1 ComponentStatus is deprecated in v1.19+
NAME STATUS MESSAGE ERROR
scheduler Unhealthy Get "http://127.0.0.1:10251/healthz": dial tcp 127.0.0.1:10251: connect: connection refused
controller-manager Healthy ok
etcd-0 Healthy {"health":"true","reason":""}
有一个Unhealthy,修改
出现问题是scheduler,因此修改得文件就是scheduler.yaml,哪个出现问题修改哪个
[root@k8s-master ~]# vim /etc/kubernetes/manifests/kube-scheduler.yaml
-- port 是指定默认端口,将其注释掉
查看另外的组件信息
$ kubectl -s https://api-server:6443 get componentstatuses
-s 指定
查看各资源对象对应的api版本
[root@k8s-master ~]# kubectl explain pod
KIND: Pod
VERSION: v1
DESCRIPTION:
Pod is a collection of containers that can run on a host. This resource is
created by clients and scheduled onto hosts.
...
查看帮助信息
$ kubectl explain deployment
$ kubectl explain deployment.spec
$ kubectl explain deployment.spec.replicas
创建pod与命名空间(名称空间)
通常写在xxx.yaml文件内
YAML的语法比较简单,主要有下面几个:
1、大小写敏感
2、使用缩进表示层级关系
3、缩进不允许使用tab,只允许空格( 低版本限制 )
4、缩进的空格数不重要,只要相同层级的元素左对齐即可
5、'#'表示注释
YAML支持以下几种数据类型:
1、纯量:单个的、不可再分的值
2、对象:键值对的集合,又称为映射(mapping)/ 哈希(hash) / 字典(dictionary)
3、数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
补充说明:
1、书写yaml切记: 后面要加一个空格
2、如果需要将多段yaml配置放在一个文件中,中间要使用---分隔
创建名称空间
vim namespace.yaml
###
apiVersion: v1
kind: Namespace
metadata:
name: webserver
###
#运行文件
$ kubectl apply -f namespace.yaml
# 如果通过命令行创建
$ kubectl create namespace webserver
# 删除名称空间[注意,这将删除名称空间下的所有资源]
$ kubectl delete namespace webserver
创建pod
(1)kind:指定了这个 API 对象的类型(Type),是一个 Pod,根据实际情况,此处资源类型可以是Deployment、Job、Ingress、Service等。
(2)metadata:包含Pod的一些meta信息,比如名称、namespace、标签等信息.
(3)spec:specification of the resource content 指定该资源的内容,包括一些container,storage,volume以及其他Kubernetes需要的参数,以及诸如是否在容器失败时重新启动容器的属性。可在特定Kubernetes API找到完整的Kubernetes Pod的属性。
"name": 容器名称
"image": 容器镜像
"command": 容器启动指令
"args": 指令参数
"workingDir": 工作目录
"ports": 容器端口
"env": 环境变量
"resource": 资源限制
"volumeMounts": 卷挂载
"livenessProbe": 存活探针
"readinessProbe": 就绪探针
"startupProbe": 启动探针
"livecycle": 钩子函数
"terminationMessagePath": 容器的异常终止消息的路径,默认在 /dev/termination-log
"imagePullPolicy": 镜像拉去策略
"securityContext": 安全上下文
"stdin": 给容器分配标准输入,类似docker run -i
"tty": 分配终端
创建一个pod
vim nginx.yaml
###
apiVersion: v1 ##指定版本
kind: Pod ##指定类型
metadata: ##包含的信息
name: nginx ##pod的名字
labels: ##标签,随便写
app: nginx
#描述
spec:
containers: ##容器
- name: nginx ##容器的名字
image: nginx:1.20 ##容器所使用的镜像
ports: ##端口
- containerPort: 80
###
kubectl apply -f nginx.yaml
创建一个命名空间及pod
vim mysql.yaml
###
apiVersion: v1
kind: Namespace
metadata:
name: cloud2304 ###名称空间的名字是cloud2304
--- ###分隔符隔开,下面是创建pod--mysql
apiVersion: v1
kind: Pod
metadata:
name: mysql
namespace: cloud2304
spec: ##描述
containers: ##容器
- name: mysql ##容器名字
image: mysql ##容器所需镜像
env: ##环境变量
- name: MYSQL_ROOT_PASSWORD ##定义用户登录数据库的密码
value: "123456"
###
kubectl apply -f mysql.yaml
[root@k8s-master ~]# kubectl get pod -A
NAMESPACE NAME READY STATUS RESTARTS AGE
cloud2304 mysql 1/1 Running 0 4h33m