kubenetes学习 4

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 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
相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
Kubernetes Linux Shell
【K8S 系列】k8s 学习二,kubernetes 核心概念及初步了解安装部署方式
【K8S 系列】k8s 学习二,kubernetes 核心概念及初步了解安装部署方式
148 0
|
存储 Kubernetes 安全
Kubernetes必备知识: PersistentVolumeClaim
PersistentVolumeClaim(简称PVC)是用户存储的请求,PVC消耗PV的资源,可以请求特定的大小和访问模式,需要指定归属于某个Namespace,在同一个Namespace的Pod才可以指定对应的PVC。 当需要不同性质的PV来满足存储需求时,可以使用StorageClass来实现。 每个 PVC 中都包含一个 spec 规格字段和一个 status 声明状态字段。
3731 0
Kubernetes必备知识: PersistentVolumeClaim
|
Kubernetes API 调度
Kubernetes必备知识: CNI
CNI的全称是 Container Network Interface,即容器网络的 API 接口。 它是 K8s 中标准的一个调用网络实现的接口。Kubelet 通过这个标准的 API 来调用不同的网络插件以实现不同的网络配置方式。实现了这个接口的就是 CNI 插件,它实现了一系列的 CNI API 接口。常见的 CNI 插件包括 Calico、flannel、Terway、Weave Net 以及 Contiv。
2148 0
Kubernetes必备知识: CNI
|
存储 Kubernetes Docker
kubenetes学习 1
kubenetes学习
|
6月前
|
存储 Kubernetes 安全
Kubernetes Pod配置:从基础到高级实战技巧
Kubernetes Pod配置:从基础到高级实战技巧
346 0
|
存储 Kubernetes 应用服务中间件
使用CoreOS来部署一个Kubernetes集群,包括必要的步骤和关键概念
使用kubeadm join命令将其他CoreOS节点加入Kubernetes集群。在每个节点上运行以下命令,其中<控制平面节点IP>是Kubernetes控制平面节点的IP地址,<令牌>是在初始化控制平面时生成的令牌。
217 0
|
Kubernetes 容器
kubenetes学习 2
kubenetes学习
|
XML Kubernetes 数据格式
kubenetes学习 4
kubenetes学习
|
Kubernetes 网络协议 Linux
【2023】Kubernetes-网络原理
【2023】Kubernetes-网络原理
122 0