Kubernetes基础操作,最细教程
文章目录集群操作--查看集群信息查看各组件信息:创建名称空间发布第一个容器化应用**实战绑定node节点**node直接配置解析共享进程名称空间共享宿主机定义pod开机运行指令集群操作–查看集群信息1.查看集群信息:[root@kub-k8s-master ~]# kubectl get nodesNAMESTATUSROLESAGEVERSIONkub-k8s-masterReadymaster
集群操作–查看集群信息
1.查看集群信息:
[root@kub-k8s-master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
kub-k8s-master Ready master 16h v1.16.1
kub-k8s-node1 Ready <none> 15h v1.16.1
kub-k8s-node2 Ready <none> 15h v1.16.1
2.删除节点(无效且显示的也可以删除)
[root@kub-k8s-master ~]# kubectl delete node kub-k8s-node1
3.查看某一个节点(节点名称可以用空格隔开写多个)
[root@kub-k8s-master ~]# kubectl get node kub-k8s-node1
NAME STATUS ROLES AGE VERSION
kub-k8s-node1 Ready <none> 15h v1.16.1
3、查看node的详细信息
[root@kub-k8s-master ~]# kubectl describe node kub-k8s-node1 #也可以查看pod的信息
#注意:最后被查看的节点名称只能用get nodes里面查到的name!
查看各组件信息:
查看service的信息:
[root@kub-k8s-master ~]# kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 22h
在不同的namespace里面查看service:
[root@kub-k8s-master ~]# kubectl get service -n kube-system
-n:namespace名称空间
查看所有名称空间内的资源:
[root@kub-k8s-master ~]# kubectl get pods --all-namespaces
同时查看多种资源信息:
[root@kub-k8s-master ~]# kubectl get pod,svc -n kube-system
查看主节点:
[root@k8s-master prome]# kubectl cluster-info
api查询:
[root@kub-k8s-master ~]# kubectl api-versions
创建名称空间
- 编写yaml文件
[root@kub-k8s-master ~]# mkdir prome
[root@kub-k8s-master ~]# cd prome/
[root@kub-k8s-master prome]# vim namespace.yaml
下面代码已经改好直接复制即可
---
apiVersion: v1 #api版本
kind: Namespace #类型---固定的
metadata: #元数据
name: ns-monitor #起个名字
labels:
name: ns-monitor
2. 创建资源
[root@kub-k8s-master prome]# kubectl apply -f namespace.yml
回显:namespace/ns-monitor created
- 查看资源
[root@kub-k8s-master prome]# kubectl get namespace
NAME STATUS AGE
default Active 22h
kube-node-lease Active 22h
kube-public Active 22h
kube-system Active 22h
ns-monitor Active 34s
4.查看某一个namespace
[root@kub-k8s-master prome]# kubectl get namespace ns-monitor
5.查看某个namespace的详细信息
[root@kub-k8s-master prome]# kubectl describe namespace ns-monitor
6.删除名称空间
[root@kub-k8s-master prome]# kubectl delete -f namespace.yml
namespace "ns-monitor" deleted
第二种方式
[root@k8s-master prome]# kubectl delete namespace ns-monitor
namespace "ns-monitor" deleted
发布第一个容器化应用
1.有镜像
2.部署应用。。--考虑做不做副本不做副本就是pod,做副本以deployment方式去创建。做了副本访问还需要做一个service,使用访问。
发布第一个容器化应用
扮演一个应用开发者的角色,使用这个 Kubernetes 集群发布第一个容器化应用。
基础语法
# kubectl create/apply -f 我的配置文件
好处:你会有一个文件能记录下 Kubernetes 到底"run"了什么,方便自身以后查看记录
编写yaml文件内容如下
[root@kub-k8s-master prome]# vim pod.yml
---
apiVersion: v1 #api版本,支持pod的版本
kind: Pod #Pod,定义类型注意语法开头大写
metadata: #元数据
name: website #这是pod的名字
labels:
app: website #自定义,但是不能是纯数字
spec: #指定的意思
containers: #定义容器
- name: test-website #容器的名字,可以自定义
image: daocloud.io/library/nginx #镜像
ports:
- containerPort: 80 #容器暴露的端口
创建pod
[root@kub-k8s-master prome]# kubectl apply -f pod.yml
pod/website created
查看pod
[root@kub-k8s-master prome]# kubectl get pods
NAME READY STATUS RESTARTS AGE
website 1/1 Running 0 74s
各字段含义:
NAME: Pod的名称
READY: Pod的准备状况,右边的数字表示Pod包含的容器总数目,左边的数字表示准备就绪的容器数目
STATUS: Pod的状态
RESTARTS: Pod的重启次数
AGE: Pod的运行时间
查看pod运行在哪台机器上
[root@kub-k8s-master prome]# kubectl get pods -o wide
可以测试访问:
[root@kub-k8s-master prome]# curl 10.244.1.3 #访问pod的ip
能访问到!!
查看pods定义的详细信息
查看pod的详细信息----指定pod名字
[root@kub-k8s-master prome]# kubectl get pod website -o yaml
-o:output
yaml:yaml格式也可以是json格式
进入Pod对应的容器内部
这个可以结合第一个安装篇,创建一个快捷方式
通过pod名称
[root@kub-k8s-master prome]# kubectl exec -it website /bin/bash
root@website:/#
删除pod
[root@kub-k8s-master prome]# kubectl delete pod pod名1 pod名2 //单个或多个删除
[root@kub-k8s-master prome]# kubectl delete pod --all //批量删除不常用
举例:
[root@kub-k8s-master prome]# kubectl delete pod website
pod "website" deleted
[root@kub-k8s-master prome]# kubectl delete -f pod.yaml
pod "website" deleted
创建pod
[root@kub-k8s-master prome]# kubectl apply -f pod.yaml #指定创建pod的yml文件名
[root@k8s-master prome]# kubectl apply -f pod.yaml --validate 想看报错信息,加上--validate参数
重新启动基于yaml文件的应用(这里并不是重新启动服务)
# kubectl delete -f XXX.yaml #删除
# kubectl apply -f XXX.yaml #创建
扩展
create与apply的区别:
create创建的应用如果需要修改yml文件,必须先指定yml文件删除,在创建新的pod。
如果是apply创建的应用可以直接修改yml文件,继续apply创建,不用先删掉。
YAML语法规则:
1. 大小写敏感
2. 使用缩进表示层级关系
3. 缩进时不允许使用Tab键,只允许使用空格
4. 缩进的空格数不重要,只要相同层级的元素左侧对齐即可
5. " 表示注释,从这个字符一直到行尾,都会被解析器忽略
实战绑定node节点
第一种方式
将node1上面的pod删除掉
[root@kub-k8s-master prome]# kubectl delete -f pod.yml
pod "website" deleted
nodeName:是一个供用户将 Pod 与 Node 进行绑定的字段,用法:
现在指定将pod创在node2上面:
[root@kub-k8s-master prome]# vim pod.yml
---
apiVersion: v1
kind: Pod
metadata:
name: website
labels:
app: website
spec:
containers:
- name: test-website
image: daocloud.io/library/nginx
ports:
- containerPort: 80
nodeName: kub-k8s-node2 #指定node节点的名称
创建
[root@kub-k8s-master prome]# kubectl apply -f pod.yml
pod/website created
NodeName:
一旦 Pod 的这个字段被赋值,k8s就会被认为这个 Pod 已经经过了调度,调度的结果就是赋值的节点名字。这个字段一般由调度器负责设置,用户也可以设置它来"骗过"调度器,这个做法一般是在测试或者调试的时候才会用到。
第二种方式通过node标签
首先我们需要知道node2上面你的标签有哪些?
1.查看node2上面的标签
[root@kub-k8s-master prome]# kubectl describe node kub-k8s-node2
1.重新创建一个新的pod
"nodeSelector:是一个供用户将 Pod 与 Node 进行绑定的字段",,通过指定标签来指定
[root@kub-k8s-master prome]# vim tomcat.yml
---
apiVersion: v1
kind: Pod
metadata:
name: tomcat
labels:
app: tomcat
spec:
containers:
- name: test-tomcat
image: daocloud.io/library/tomcat:8
ports:
- containerPort: 8080
nodeSelector: #指定标签
kubernetes.io/hostname: kub-k8s-node2
2.创建pod
[root@kub-k8s-master prome]# kubectl apply -f tomcat.yml
pod/tomcat created
表示这个 Pod 永远只能运行在携带了"kubernetes.io/hostname: kub-k8s-node2"标签(Label)的节点上;否则,它将调度失败。
node直接配置解析
设置pod容器里面的hosts文件内容,也是做本地解析
HostAliases:定义 Pod 的 hosts 文件(比如 /etc/hosts)里的内容,用法:
1.首先先将刚创建的pod删除掉
[root@kub-k8s-master prome]# kubectl delete -f tomcat.yml
pod "tomcat" deleted
[root@kub-k8s-master prome]# vim tomcat.yml
---
apiVersion: v1
kind: Pod
metadata:
name: tomcat
labels:
app: tomcat
spec:
hostAliases:
- ip: "192.168.246.113" #给哪个ip做解析。实验环境下这个ip自定义的
hostnames:
- "foo.remote" #解析的名字。用引号引起来可以写多个
- "bar.remote"
containers:
- name: test-tomcat
image: daocloud.io/library/tomcat:8
ports:
- containerPort: 8080
2.创建pod
[root@kub-k8s-master prome]# kubectl apply -f tomcat.yml
pod/tomcat created
3.连接pod
[root@kub-k8s-master prome]# kubectl exec -it tomcat /bin/bash
root@tomcat:/usr/local/tomcat# cat /etc/hosts #查看hosts文件
共享进程名称空间
[root@kub-k8s-master prome]# kubectl delete -f pod.yml
pod "website" deleted
[root@kub-k8s-master prome]# vim pod.yml #修改如下。最好是提前将镜像pull下来。
---
apiVersion: v1
kind: Pod
metadata:
name: website
labels:
app: website
spec:
shareProcessNamespace: true #共享进程名称空间
containers:
- name: test-web
image: daocloud.io/library/nginx
ports:
- containerPort: 80
- name: busybos
image: daocloud.io/library/busybox
stdin: true
tty: true
2.创建
[root@kub-k8s-master prome]# kubectl apply -f pod.yml
pod/website created
意思解释
1. 定义了 shareProcessNamespace=true
表示这个 Pod 里的容器要共享进程(PID Namespace)如果是false则为不共享。
2. 定义了两个容器:
一个 nginx 容器
一个开启了 tty 和 stdin 的 busybos 容器
在 Pod 的 YAML 文件里声明开启它们俩,等同于设置了 docker run 里的 -it(-i 即 stdin,-t 即 tty)参数。
可以直接认为 tty 就是 Linux 给用户提供的一个常驻小程序,用于接收用户的标准输入,返回操作系统的标准输出。为了能够在 tty 中输入信息,需要同时开启 stdin(标准输入流)。
此 Pod 被创建后,就可以使用 shell 容器的 tty 跟这个容器进行交互了。
查看运行在那台机器上面:
我们登录node1的机器连接busybox的容器
[root@kub-k8s-node1 ~]# docker exec -it f684bd1d05b5 /bin/sh
在容器里不仅可以看到它本身的 ps 指令,还可以看到 nginx 容器的进程,以及 Infra 容器的 /pause 进程。也就是说整个 Pod 里的每个容器的进程,对于所有容器来说都是可见的:**它们共享了同一个 PID Namespace。
[root@kub-k8s-master prome]# kubectl delete -f pod.yml
[root@kub-k8s-master prome]# vim pod.yml
将shareProcessNamespace=true修改为false
[root@kub-k8s-master prome]# kubectl apply -f pod.yml
pod/website created
验证:
共享宿主机
刚才的都是pod里面容器的Namespace,并没有和本机的Namespace做共享,接下来我们可以做与本机的Namespace共享,可以在容器里面看到本机的进程。
[root@kub-k8s-master prome]# kubectl delete -f pod.yml
pod "website" deleted
[root@kub-k8s-master prome]# vim pod.yml #修改如下
---
apiVersion: v1
kind: Pod
metadata:
name: website
labels:
app: website
spec:
hostNetwork: true #共享宿主机网络
hostIPC: true #共享ipc通信
hostPID: true #共享宿主机的pid
containers:
- name: test-web
image: daocloud.io/library/nginx
ports:
- containerPort: 80
- name: busybos
image: daocloud.io/library/busybox
stdin: true
tty: true
创建pod
[root@kub-k8s-master prome]# kubectl apply -f pod.yml
pod/website created
验证:
定义了共享宿主机的 Network、IPC 和 PID Namespace。这样,此 Pod 里的所有容器,会直接使用宿主机的网络、直接与宿主机进行 IPC 通信、看到宿主机里正在运行的所有进程。
定义pod开机运行指令
vim pod.yml
---
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
app: nginx
spec:
hostAliases:
- ip: "10.8.156.120"
hostnames:
- "www.mingqing.com"
nodeName: k8s-nonde2
shareProcessNamespace: true
containers:
- name: nginx
image: daocloud.io/library/nginx:1.12.0-alpine
lifecycle:
postStart:
exec:
command: ["/bin/sh", "-c", "echo 6666 mingqing > /usr/share/mingqing"]
preStop:
ports:
- containerPort: 80
- name: busybos
image: daocloud.io/library/busybox
stdin: true
tty: true
创建pod
[root@k8s-mastet prome]# kubectl apply -f pod.yml
pod/nginx created
验证:
验证查看
root@k8s-nonde2 ~]# docker ps
[root@k8s-nonde2 ~]# docker exec -it b860c024c1e1 /bin/sh
/ # cat /usr/share/mingqing
6666 mingqing
/ #
更多推荐
所有评论(0)