Kubernetes基础操作,最细教程

2024-04-04 12:32

本文主要是介绍Kubernetes基础操作,最细教程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 集群操作--查看集群信息
    • 查看各组件信息:
    • 创建名称空间
    • 发布第一个容器化应用
    • **实战绑定node节点**
    • node直接配置解析
    • 共享进程名称空间
    • 共享宿主机
    • 定义pod开机运行指令

集群操作–查看集群信息

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

创建名称空间

  1. 编写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
  1. 查看资源
[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: websitelabels:app: website
spec:containers:- name: test-websiteimage: daocloud.io/library/nginxports:- containerPort: 80nodeName: 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: tomcatlabels:app: tomcat
spec:containers:- name: test-tomcatimage: daocloud.io/library/tomcat:8ports:- containerPort: 8080nodeSelector:      #指定标签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: tomcatlabels:app: tomcat
spec:hostAliases:- ip: "192.168.246.113"   #给哪个ip做解析。实验环境下这个ip自定义的hostnames:- "foo.remote"    #解析的名字。用引号引起来可以写多个- "bar.remote"containers:- name: test-tomcatimage: daocloud.io/library/tomcat:8ports:- 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: websitelabels:app: website
spec:shareProcessNamespace: true  #共享进程名称空间containers:- name: test-webimage: daocloud.io/library/nginxports:- containerPort: 80- name: busybosimage: daocloud.io/library/busyboxstdin: truetty: 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: websitelabels:app: website
spec:hostNetwork: true  #共享宿主机网络hostIPC: true  #共享ipc通信hostPID: true  #共享宿主机的pidcontainers:- name: test-webimage: daocloud.io/library/nginxports:- containerPort: 80- name: busybosimage: daocloud.io/library/busyboxstdin: truetty: 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: nginxlabels:app: nginx
spec:hostAliases:- ip: "10.8.156.120"hostnames:- "www.mingqing.com"nodeName: k8s-nonde2shareProcessNamespace: truecontainers:- name: nginximage: daocloud.io/library/nginx:1.12.0-alpinelifecycle:postStart:exec:command: ["/bin/sh", "-c", "echo 6666 mingqing  > /usr/share/mingqing"]preStop:ports:- containerPort: 80- name: busybosimage: daocloud.io/library/busyboxstdin: truetty: 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
/ #
在这里插入图片描述

这篇关于Kubernetes基础操作,最细教程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/875783

相关文章

Nexus安装和启动的实现教程

《Nexus安装和启动的实现教程》:本文主要介绍Nexus安装和启动的实现教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、Nexus下载二、Nexus安装和启动三、关闭Nexus总结一、Nexus下载官方下载链接:DownloadWindows系统根

SQL中JOIN操作的条件使用总结与实践

《SQL中JOIN操作的条件使用总结与实践》在SQL查询中,JOIN操作是多表关联的核心工具,本文将从原理,场景和最佳实践三个方面总结JOIN条件的使用规则,希望可以帮助开发者精准控制查询逻辑... 目录一、ON与WHERE的本质区别二、场景化条件使用规则三、最佳实践建议1.优先使用ON条件2.WHERE用

从基础到进阶详解Pandas时间数据处理指南

《从基础到进阶详解Pandas时间数据处理指南》Pandas构建了完整的时间数据处理生态,核心由四个基础类构成,Timestamp,DatetimeIndex,Period和Timedelta,下面我... 目录1. 时间数据类型与基础操作1.1 核心时间对象体系1.2 时间数据生成技巧2. 时间索引与数据

Linux链表操作方式

《Linux链表操作方式》:本文主要介绍Linux链表操作方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、链表基础概念与内核链表优势二、内核链表结构与宏解析三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势六、典型应用场景七、调试技巧与

Java Multimap实现类与操作的具体示例

《JavaMultimap实现类与操作的具体示例》Multimap出现在Google的Guava库中,它为Java提供了更加灵活的集合操作,:本文主要介绍JavaMultimap实现类与操作的... 目录一、Multimap 概述Multimap 主要特点:二、Multimap 实现类1. ListMult

CnPlugin是PL/SQL Developer工具插件使用教程

《CnPlugin是PL/SQLDeveloper工具插件使用教程》:本文主要介绍CnPlugin是PL/SQLDeveloper工具插件使用教程,具有很好的参考价值,希望对大家有所帮助,如有错... 目录PL/SQL Developer工具插件使用安装拷贝文件配置总结PL/SQL Developer工具插

安装centos8设置基础软件仓库时出错的解决方案

《安装centos8设置基础软件仓库时出错的解决方案》:本文主要介绍安装centos8设置基础软件仓库时出错的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录安装Centos8设置基础软件仓库时出错版本 8版本 8.2.200android4版本 javas

Java中的登录技术保姆级详细教程

《Java中的登录技术保姆级详细教程》:本文主要介绍Java中登录技术保姆级详细教程的相关资料,在Java中我们可以使用各种技术和框架来实现这些功能,文中通过代码介绍的非常详细,需要的朋友可以参考... 目录1.登录思路2.登录标记1.会话技术2.会话跟踪1.Cookie技术2.Session技术3.令牌技

Python中文件读取操作漏洞深度解析与防护指南

《Python中文件读取操作漏洞深度解析与防护指南》在Web应用开发中,文件操作是最基础也最危险的功能之一,这篇文章将全面剖析Python环境中常见的文件读取漏洞类型,成因及防护方案,感兴趣的小伙伴可... 目录引言一、静态资源处理中的路径穿越漏洞1.1 典型漏洞场景1.2 os.path.join()的陷

Python使用Code2flow将代码转化为流程图的操作教程

《Python使用Code2flow将代码转化为流程图的操作教程》Code2flow是一款开源工具,能够将代码自动转换为流程图,该工具对于代码审查、调试和理解大型代码库非常有用,在这篇博客中,我们将深... 目录引言1nVflRA、为什么选择 Code2flow?2、安装 Code2flow3、基本功能演示