kubenetes学习 4

简介: kubenetes学习

命令式对象配置

(通过命令配置和配置文件去操作kubernetes

kubectl create/path -f nginx.yaml

(把参数集成在配置文件中)

(就是使用命令配合文件一起操作kubernetes资源)

1.创建一个nginxpod.yaml文件写入以下内容

apiVersion: v1
kind: Namespace
metadata:
name: xiaole
---
apiVersion: v1
kind: Pod
metadata:
name: nginxpod
namespace: xiaole
spec:
containers:
- name: nginx-containers
image: nginx
#文件详解
apiVersion: v1 #api版本
kind: Namespace #操作的资源
metadata: #资源元数据
name: xiaole #要创建的namespace 名字
#对应的命令 kubectl create namespace xiaole
---
apiVersion: v1
kind: Pod
metadata:
name: nginxpod #定义pod的名字
namespace: xiaole #pod要绑定的namespace
spec: #资源规格
containers:
- name: nginx-containers #pod中容器的名字
image: nginx #创建pod使用的镜像

2.执行命令create命令创建资源

#命令: kubectl create -f nginxpod.yaml
[root@master ~]# kubectl create -f nginxpod.yaml
namespace/xiaole created
pod/nginxpod created
#查看创建的pod
[root@master ~]# kubectl get pod -n xiaole -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE
READINESS GATES
nginxpod 1/1 Running 0 21m 10.244.1.10 node <none>
<none>

3.执行delete命令删除资源

#命令: kubectl delete -f nginxpod.yaml
[root@master ~]# kubectl delete -f nginxpod.yaml
namespace "xiaole" deleted
pod "nginxpod" deleted
#删除yaml文件中的配置资源

声明式对象配置

(通过apply命令和配置文件去操作kubernetes资源)

kubectl apply -f nginx-pod.yaml

(用于创建和更新资源)

1.创建一个nginxpod.yaml文件写入以下内容

apiVersion: v1
kind: Namespace
metadata:
name: xiaole
---
apiVersion: v1
kind: Pod
metadata:
name: nginxpod
namespace: xiaole
spec:
containers:
- name: nginx-containers
image: nginx
#文件详解
apiVersion: v1 #api版本
kind: Namespace #操作的资源
metadata: #资源元数据
name: xiaole #要创建的namespace 名字
#对应的命令 kubectl create namespace xiaole
---
apiVersion: v1
kind: Pod
metadata:
name: nginxpod #定义pod的名字
namespace: xiaole #pod要绑定的namespace
spec: #资源规格
containers:
- name: nginx-containers #pod中容器的名字
image: nginx:1.17.2 #创建pod使用的镜像

2.执行命令

#命令:kubectl get pod -n xiaole
[root@master ~]# kubectl apply -f nginxpod.yaml
namespace/xiaole created
pod/nginxpod created
#再次执行把nginx的1.17.2版本改成1.17.1
[root@master ~]# kubectl apply -f nginxpod.yaml
namespace/xiaole unchanged
pod/nginxpod configured
#如果第一次执行没有配置文件中的资源会先去创建资源 如果已经有配置文件中的资源再次执行就会更新资源
#输入资源的详细信息
[root@master ~]# kubectl describe pod nginxpod -n xiaole
Name: nginxpod
Namespace: xiaole
Priority: 0
Node: node/192.168.30.135
Start Time: Sun, 13 Nov 2022 20:54:35 +0800
Labels: <none>
Annotations: Status: Running
IP: 10.244.1.12
IPs:
IP: 10.244.1.12
Containers:
nginx-containers:
Container ID:
docker://a14e7de191d2363237b398e284575da1d299677a45b2dadb205086a328eb0c46
Image: nginx:1.17.1
Image ID: dockerpullable://nginx@sha256:b4b9b3eee194703fc2fa8afa5b7510c77ae70cfba567af1376a573a96
7c03dbb
Port: <none>
Host Port: <none>
State: Running
Started: Sun, 13 Nov 2022 20:55:11 +0800
Last State: Terminated
Reason: Completed
Exit Code: 0
Started: Sun, 13 Nov 2022 20:55:06 +0800
Finished: Sun, 13 Nov 2022 20:55:06 +0800
Ready: True
Restart Count: 1
Environment: <none>
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from default-token-mb2zn (ro)
Conditions:
Type Status
Initialized True
Ready True
ContainersReady True
PodScheduled True
Volumes:
default-token-mb2zn:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-mb2zn
Optional: false
QoS Class: BestEffort
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute for 300s
node.kubernetes.io/unreachable:NoExecute for 300s
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 111s default-scheduler Successfully assigned
xiaole/nginxpod to node
Normal Pulling 110s kubelet, node Pulling image
"nginx:1.17.2"
Normal Pulled 81s kubelet, node Successfully pulled
image "nginx:1.17.2"
Normal Killing 80s kubelet, node Container nginxcontainers definition changed, will be restarted
Normal Pulling 80s kubelet, node Pulling image
"nginx:1.17.1"
Normal Created 75s (x2 over 80s) kubelet, node Created container
nginx-containers
Normal Started 75s (x2 over 80s) kubelet, node Started container
nginx-containers
Normal Pulled 75s kubelet, node Successfully pulled
image "nginx:1.17.1"
#看输出的日志可以发现第一次运行的1.17.2的nginx版本 更新一下配置变成1.17.1版本的nginx
总结:
声明式对象配置就是在yaml文件中描述一个资源的最终状态
使用apply操作、
如果资源不存在,就创建资源 相当于命令 kubectl create
如果资源已经存在,就更新资源 相当于 kubectl patchs

image.png

Namespace

(命名空间)

用来对资源进行隔离

默认的情况下kubernetes中的pod都是可以相互访问的如果不想让其中的两个pod相互访问这个时候我

们就可以使用Namespace 将两个资源进行隔离 把他们分到不同的namespace

可以通过kubernetes的授权机制 把不同的namespace交给不同的用户进行管理 还能结合kubernetes

资源配额机制 限定不同用户的占用资源例如CPU内存等

#在kubernetes集群启动后 系统会默认创建一些 namespace
[root@master ~]# kubectl get namespace
NAME STATUS AGE
default Active 10d #所有为指定Namespace的对象都会分配到default中 所有
pod都会在一个Namespace中 如果指定了就会在你指定的Namespace中 如果未指定都会在default中
Active 9d
kube-node-lease Active 10d #集群节点之间 的心跳维护 v1.13引入的 用来
kube-public Active 10d #此命名空间下面的资源可以被所有人访问 包括未认证用户
kube-system Active 10d #所有kubernetes系统创建的命名空间都处于这个命名空间
#查看kube-system命名空间下的pod
[root@master ~]# kubectl get pod -n kube-system
NAME READY STATUS RESTARTS AGE
coredns-66bff467f8-q6q99 1/1 Running 5 10d
coredns-66bff467f8-tx5w8 1/1 Running 5 10d
etcd-master 1/1 Running 5 10d
kube-apiserver-master 1/1 Running 5 10d
kube-controller-manager-master 1/1 Running 5 10d
kube-proxy-2fn45 1/1 Running 5 10d
kube-proxy-6t9jt 1/1 Running 5 9d
kube-proxy-cxjhh 1/1 Running 5 9d
kube-scheduler-master 1/1 Running 5 10d
#Namespace的基本操作
#查看所有Namespace
[root@master ~]# kubectl get namespace
NAME STATUS AGE
default Active 10d
kube-flannel Active 9d
kube-node-lease Active 10d
kube-public Active 10d
kube-system Active 10d
#查看其中的一个Namespace
[root@master ~]# kubectl get namespace default
NAME STATUS AGE
default Active 10d
#NAME Namespace名字
#STATUS Namespace现在的状态 STATUS有两种状态 Actice是正在运行 Terminating是正在删除命
名空间
#AGE Namespace的存活时间
#描述Namespace的详细信息
root@master ~]# kubectl get namespace default
NAME STATUS AGE
default Active 10d
[root@master ~]# kubectl describe namespace default
Name: default #名字
Labels: <none> #标签
Annotations: <none>
Status: Active #状态
No resource quota. #对Namespace的资源限制
No LimitRange resource. #对Namespace中的每个组件做的资源限制
#创建Namespace
[root@master ~]# kubectl create namespace xiaole
namespace/xiaole created
#删除Namespace
[root@master ~]# kubectl delete namespace xiaole
namespace "xiaole" deleted
#命令式对象配置使用方法
[root@master ~]# cat xiaole.yaml
apiVersion: v1
kind: Namespace
metadata:
name: xiaole
#创建Namespace
[root@master ~]# kubectl create -f xiaole.yaml
namespace/xiaole created
#查看Namespace
[root@master ~]# kubectl get -f xiaole.yaml
NAME STATUS AGE
xiaole Active 72s
#删除Namespace
[root@master ~]# kubectl delete -f xiaole.yaml
namespace "xiaole" deleted

Pod

Podkubernetes集群中最小的管理单元,程序要运行必须要跑在容器里面,而容器必须在Pod里面

Pod可以认为是对容器的封装 一个Pod中可以有一个或多个容器我们可以通过对Pod的操作来管理容器

kubernetes在启动的时候集群中的组件也是以Pod方式运行的可以通过下面命令查看:

[root@master ~]# kubectl get pod -n kube-system
NAME READY STATUS RESTARTS AGE
coredns-66bff467f8-q6q99 1/1 Running 5 10d
coredns-66bff467f8-tx5w8 1/1 Running 5 10d
etcd-master 1/1 Running 5 10d
kube-apiserver-master 1/1 Running 5 10d
kube-controller-manager-master 1/1 Running 5 10d
kube-proxy-2fn45 1/1 Running 5 10d
kube-proxy-6t9jt 1/1 Running 5 9d
kube-proxy-cxjhh 1/1 Running 5 9d
kube-scheduler-master 1/1 Running 5 10d
#创建Pod
#kubernetes没有提供Pod的运行命令 都是通过Pod控制器来实现控制的
#命令格式:kubectl run (pod控制器) [参数]
#--image 指定pod镜像
#--port 指定端口
#--namespace 指定命名空间
#运行前我们需要先创建指定的命名空间
[root@master ~]# kubectl run nginx --image=nginx:1.17.1 --port=80 --namespace
nginx-ns
pod/nginx created
#详细查看pod
[root@master ~]# kubectl get -n nginx-ns pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE
READINESS GATES
nginx 1/1 Running 0 3m39s 10.244.1.16 node <none>
<none>
#-o wide 更多的 额外的
#NAME Pod的名称
#READY #当前Pod里面有几个容器
#STATUS 状态
#RESTARTS 重启次数(在pod容器运行的过程中它会重启这里会告诉你重启多少次)
#AGE 运行时间
#IP Pod的ip
#NODE 运行在哪个节点上面
#查看pod更详细的信息
nginx 1/1 Running 0 8m33s
[root@master ~]# kubectl describe pod nginx -n nginx-ns
Name: nginx #名称
Namespace: nginx-ns #运行在哪个命名空间
Priority: 0
Node: node/192.168.30.135 #运行在哪个节点
Start Time: Sat, 19 Nov 2022 10:46:41 +0800 #启动时间
Labels: run=nginx #标签
Annotations: <none> #注解
Status: Running #状态
IP: 10.244.1.16 #IP地址
IPs:
IP: 10.244.1.16
Containers: #关于容器的信息
nginx:
Container ID:
docker://8dacf9d27b3ca8fc6765f69e9a974c21a1c19e357c3124a91ba9f68e5e7df9ed #容器的
id
Image: nginx:1.17.1 #运行的镜像
Image ID: dockerpullable://nginx@sha256:b4b9b3eee194703fc2fa8afa5b7510c77ae70cfba567af1376a573a96
7c03dbb #镜像id
Port: 80/TCP #端口
Host Port: 0/TCP#主机端口
State: Running#状态
Started: Sat, 19 Nov 2022 10:46:42 +0800 #启动时间
Ready: True#是否准备就绪
Restart Count: 0 #重启次数
Environment: <none> #环境变量
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from default-token-kqwvc (ro)
#挂载点
Conditions:
Type Status
Initialized True
Ready True
ContainersReady True
PodScheduled True
Volumes:
default-token-kqwvc:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-kqwvc
Optional: false
QoS Class: BestEffort
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute for 300s
node.kubernetes.io/unreachable:NoExecute for 300s
Events: #下面这些比较重要 pod的运行事件 可以用来进行排错
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 8m45s default-scheduler Successfully assigned nginxns/nginx to node
Normal Pulled 8m44s kubelet, node Container image "nginx:1.17.1"
already present on machine
Normal Created 8m44s kubelet, node Created container nginx
Normal Started 8m44s kubelet, node Started container nginx
相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
Ubuntu NoSQL 关系型数据库
ubuntu 20.04裸机安装paperless-ngx
ubuntu 20.04裸机安装paperless-ngx
864 0
|
数据采集 数据管理 数据挖掘
CDGP|数据治理策略揭秘:因企制宜,实现精准管控新高度
数据治理是指通过制定一系列政策、流程和技术手段,对企业数据进行全面、系统、规范的管理。它不仅能够确保数据的准确性、一致性和安全性,还能提升数据的质量和价值,为企业决策提供有力支持。因此,制定数据治理策略的首要任务是明确其核心价值,确保策略能够服务于企业的整体战略目标。
|
分布式计算 关系型数据库 Hadoop
使用Sqoop将数据从Hadoop导出到关系型数据库
使用Sqoop将数据从Hadoop导出到关系型数据库
|
存储 关系型数据库 分布式数据库
PolarDB-SCC使用问题之为什么PolarDB-SCC选择基于RDMA的日志传输
PolarDB-SCC使用问题之为什么PolarDB-SCC选择基于RDMA的日志传输
|
应用服务中间件 nginx Docker
docker安装nginx并暴露端口
【1月更文挑战第9天】docker安装nginx并暴露端口
629 0
|
存储 JSON Java
Java基于API接口爬取淘宝商品数据
随着互联网的普及和电子商务的快速发展,越来越多的商家选择在淘宝等电商平台上销售商品。对于开发者来说,通过API接口获取淘宝商品数据,可以更加便捷地进行数据分析和商业决策。本文将介绍如何使用Java基于淘宝API接口爬取商品数据,包括请求API、解析JSON数据、存储数据等步骤,并提供相应的代码示例
|
机器学习/深度学习 人工智能 自然语言处理
ChatGPT,开启人机交互新篇章
ChatGPT在世界掀起了生成式AI的热潮,2个月实现月活用户过亿,是人类有史以来突破1亿人用户最快的消费端互联网产品,打破了Tiktok9个月破亿用户的纪录。不少专家将其视为第四次工业革命,资本市场也贡献大量涨停。当第一波的热情消退,我们通过自我体验,感受更为清晰。
596 0
ChatGPT,开启人机交互新篇章
|
存储 缓存 安全
JVM(三)-运行时数据区(栈、程序计数器)
JVM(三)-运行时数据区(栈、程序计数器)
188 0
下一篇
开通oss服务