Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Kubernetes学习笔记(一)

Kubernetes学习笔记(一)

原创
作者头像
用户10662715
发布于 2025-04-24 08:52:57
发布于 2025-04-24 08:52:57
1400
举报

一、Kubernetes 核心概念

1、Kubernetes集群架构与组件

2、Master组件:

kube-apiserver

Kubernetes API,集群的统一入口,各组件协调者,以RESTful API提供接口服务,所有对象资源的增删改查和监听操作都交给APISer ver处理后再提交给Etcd存储。

kube-controller-manager

处理集群中常规后台任务,一个资源对应一个控制器,而ControllerManager就是负责管理这些控制器的。例如Deployment、Ser vice

kube-scheduler

根据调度算法为新创建的Pod选择一个Node节点,可以任意部署,可以部署在同一个节点上,也可以部署在不同的节点上。

etcd

分布式键值存储系统。用于保存集群状态数据,比如Pod、Service等对象信息。

3、Node组件

kubelet

kubelet是Master在Node节点上的Agent,管理本机运行容器的生命周期,比如创建容器、Pod挂载数据卷、下载secret、获取容器和节点状态等工作。kubelet将每个Pod转换成一组容器。

kube-proxy

在Node节点上实现Pod网络代理,维护网络规则和四层负载均衡工作。

第三方容器引擎

容器引擎,运行容器, 例如docker、containerd、podman

4、kubeconfig配置文件

kubectl使用kubeconfig认证文件连接K8s集群,使用kubectl config指令生成kubeconfig文件。

二、 kubectl管理命令

1、命令列表:

2、基本资源概念:

举例子:

[root@k8s-master ~]# kubectl create deployment web1 --image=nginx

镜像来源:

1)如果镜像地址里不带域名或IP,说明是从Docker Hub(hub.docker.com)上下载的

2)如果镜像地址里带域名或IP,说明是从对应的镜像仓库的下载的。

[root@k8s-master ~]# kubectl expose deployment web1 --port=80 --target-port=80 --type=NodePort

--port #Service自身端口,现在用不到,后面会讲

--target-port #目标端口,即容器中服务运行的端口

--type #Service类型

#查看pod

#查看deployment

#查看service

用任何work节点加暴漏的端口访问

标签:

kubectl get pods --show-labels # 查看Pod标签

kubectl get pods -l app=web-demo # 根据标签过滤Pod

3、命名空间(Namespace):

Kubernetes将资源对象逻辑上隔离,从而形成多个虚拟集群。

应用场景:

• 资源分类管理,可根据不同团队、项目划分命名空间

• 基于命名空间权限授权

(1)查看k8s下的所有命名空间:

kubectl get namespace

• default:默认命名空间

• kube-system:K8s系统方面的命名空间

• kube-public:公开的命名空间,谁都可以访问

• kube-node-lease:K8s内部命名空间

查看不同的命名空间下的pod

(2)两种方法指定资源所属的命名空间:

• 命令行加 -n

• yaml资源元数据里指定namespace字段

[root@k8s-master ~]# kubectl create namespace team-a #创建命名空间

namespace/team-a created

[root@k8s-master ~]# kubectl create deployment web2 --image=nginx --replicas=3 -n team-a

deployment.apps/web2 created #在新的命名空间下创建deployment

[root@k8s-master ~]# kubectl expose deployment web2 --port=80 --type=NodePort --target-port=80 --type=NodePort -n team-a #通过service暴漏端口

service/web2 exposed

#在新的命名空间下查看pod,service

可以通过任何node节点加暴漏的端口访问

三、应用程序deployment

生命周期:

1、Deployment定义:

创建命名空间:

[root@k8s-master web-demo]# kubectl create namespace demo

namespace/demo created

创建Deployment资源部署应用镜像:

[root@k8s-master ~]# kubectl create deployment web-demo1 --image=nginx --replicas=3 -n demo

[root@k8s-master ~]# kubectl get pods -n demo

创建Service对外暴露Pod:

[root@k8s-master web-demo]# kubectl expose deployment web-demo1 --port=80 --target-port=80 --type=NodePort --name=web -n demo

查看service状态:

[root@k8s-master web-demo]# kubectl get service -n demo

2、YAML文件编排

K8s是一个容器编排引擎,使用YAML文件编排要部署应用,因此在学习之前,应先了解YAML语法格式:

• 缩进表示层级关系

• 不支持制表符“tab”缩进,使用空格缩进

• 通常开头缩进 2 个空格

• 字符后缩进 1 个空格,如冒号、逗号等

• “---” 表示YAML格式,一个文件的开始

• “#”注释

1、deployment的yaml

等同于:kubectl create deployment web-demo --image=nginx --replicas=3 -n demo

kubectl get endpoints -n demo #查看service关联的后端pod

kubectl create -f xxx.yaml #创建

kubectl apply -f xxx.yaml #创建+更新

kubectl rollout restart deployment web2 #重启deployment

kubectl rollout restart ds calico-node -n calico-system #重启网络

定义标签:

(1)一般推荐定义两个,由项目和应用组成,例如

project: ec # 键:值,可任意定义

app: portal

  1. matchLabels必须与下面labels保持一致,否则apply会报错。

2、service的yaml

等同于:kubectl expose deployment web-demo --port=80 --target-port=80 --type=NodePort -n demo

3、将你需要创建的资源描述到YAML文件中,然后进行创建、更新和卸载。

部署:kubectl apply -f xxx.yaml

卸载:kubectl delete -f xxx.yaml

4、资源字段太多,记不住怎么办?

(1)用create命令生成yaml文件:

[root@k8s-master ~]# kubectl create deployment web-demo --image=web-demo:v1 --replicas=3 -n demo --dry-run=client -o yaml >deployment-tpl.yaml

[root@k8s-master ~]# vim deployment-tpl.yaml

(2)用get命令导出

[root@k8s-master ~]# kubectl get deployment -n demo

NAME READY UP-TO-DATE AVAILABLE AGE

web-demo 3/3 3 3 3h47m

web-demo-v2 3/3 3 3 173m

[root@k8s-master ~]# kubectl get deployment web-demo -n demo -o yaml > deployment-export.yaml

(3) 获取资源下的字段

kubectl explain deployment

kubectl explain deployment.spec.template.spec.containers

3、版本升级:

应用升级是一个常见的操作,通常在应用引入新功能、修复错误,会将新版本发布到线上。在Kubernetes中应用升级有两种方式:

•方法一: 修改YAML文件里image字段,修改为新镜像地址,然后kubectl apply -f xxx.yaml

•方法二:kubectl set image deployment/<名称> <容器名称>=<新的镜像地址>

例子:

创建一个nginx为1.16版本的nginx的deployment

[root@k8s-master ~]# kubectl create deployment web-nginx --image=nginx:1.16 --replicas=3 -n demo

通过service暴漏出来

[root@k8s-master ~]# kubectl expose deployment web-nginx --port=80 --target-port=80 --type=NodePort -n demo

查看pod和service

任意一个节点访问nginx是1.16版本

查看命名空间demo 里面的service后端关联的pod对应的IP

[root@k8s-master ~]# kubectl get ep -n demo

查看pod的IP地址

[root@k8s-master ~]# kubectl get pods -o wide -n demo

查看pod的IP是对应的

(1)方法一:升级

[root@k8s-master ~]# kubectl create deployment web-nginx --image=nginx:1.16 --replicas=3 -n demo --dry-run=client -o yaml > web-nginx-deploy.yaml #生成yaml文件

将这里改成1.17版本:

[root@k8s-master ~]# kubectl apply -f web-nginx-deploy.yaml #更新nginx版本

查看nginx已经运行

版本已经变成1.17

(2)方法二:

nginx 由1.18版本升级为1.20版本

[root@k8s-master ~]# kubectl set image deployment web-nginx nginx=nginx:1.20 -n demo

模拟浏览器访问nginx;1秒中访问一次

[root@k8s-node2 ~]# for i in {1..2000};do curl -I http://192.168.183.148:32376 -s |grep Server;sleep 1;done

看到nginx是逐步被替换成高版本,逐步过渡,不会出现中断,不会影响业务

4、滚动升级定义:

[root@k8s-master ~]# kubectl describe deployment web-nginx -n demo #查看滚动升级的过程

nginx:1.16->nginx1.17

replicaset(简称RS),up扩展副本数,down缩容副本数

nginx1.16版本:web-nginx-5c49c474b6 副本数为3(旧RS)

nginx1.17版本:web-nginx-7d9cddf4cf副本数为1(新RS)

旧(RS)由3设置为2

新(RS)由1设置为2

旧(RS)由2设置为1

新(RS)由2设置为3

旧(RS)由1设置为0

旧版本Pod副本数不断减少,新版本Pod副本数不断增加,直到新版完全替换旧版本的数量。

5、应用发布失败回滚:

应用升级失败时,执行回滚操作是一个关键的步骤,以确保你的应用程序能够恢复到之前稳定的状态。

kubectl关于回滚命令如下:

# 查看历史发布版本

kubectl rollout history deployment/<名称>

每次升级完后建议给这个升级设置说明,方便回滚时查看:

kubectl annotate deployment/web kubernetes.io/change-cause="这是v2版本"

# 回滚上一个版本

kubectl rollout undo deployment/<名称>

[root@k8s-master ~]# kubectl rollout undo deployment web-nginx -n demo

deployment.apps/web-nginx rolled back

检验:

# 回滚历史指定版本

kubectl rollout undo deployment/<名称> --to-revision=<版本号>

6、应用扩容/缩容

例子:pod扩容为10个:

[root@k8s-master ~]# kubectl scale deployment web-nginx --replicas=10 -n demo

新启动7个:

pod改成5个,

[root@k8s-master ~]# kubectl scale deployment web-nginx --replicas=5 -n demo

7、项目下线:

[root@k8s-master ~]# kubectl delete deployment web-demo -n demo

再次查看已经没有了

四、k8s 内部监控与日志

1、查看资源集群状态和详细信息:

查看master组件状态:

查看node状态:

kubectl get node

查看资源的详细:

kubectl describe <资源类型> <资源名称>

查看资源信息:(当前命名空间的资源列表)

kubectl get <资源类型> <资源名称> # -o wide、-o yaml

查看某一个pod资源详情,并以yaml格式

查看节点或者pod的详细信息,加上-o wide后可以显示更详细的信息。

2、管理K8s组件日志

k8s各节点的组件:

Mater节点:apiserver、controller-manager、scheduler、etcd

Node节点:kubelet,kube-proxy,docker。

systemd守护进程管理的组件:

journalctl -u kubelet

Pod部署的组件:

[root@k8s-master ~]# kubectl logs kube-proxy-lzjxg -n kube-system

系统日志:

[root@k8s-master~]# tail/var/log/messages

3、管理K8s应用日志

查看容器标准输出日志:

kubectl logs <Pod名称>

kubectl logs -f <Pod名称>

标准输出在宿主机的路径:

/var/lib/docker/containers/<container-id>/<container-id>-json.log

查看日志的方法:以第一个容器为例子:

查看这个容器工作在node1上面:

在node1搜索到该容器的id

根据标准输出在宿主机的路径,查看日志:

日志文件,进入到终端日志目录查看:

kubectl exec -it <Pod名称> -- bash

根据实际服务的日志目录查看日志:

4、监控集群资源利用率

metrics-server工作流程:kubectl top --> apiserver --> metrics-server-->各个节点kubectl内置cadvisor获取容器资源指标。

执行时会提示错误:error: Metrics API not available

这是因为这个命令需要由metric-server服务提供数据,而这个服务默认没有

在node节点上拉去metrics-server服务:

[root@k8s-node1 ~]# docker pull lizhenliang/metrics-server:v0.6.1

v0.6.1: Pulling from lizhenliang/metrics-server

下载metrics-server.yaml并上传到master

[root@k8s-master ~]# kubectl apply -f metrics-server.yaml #部署一下

在kube-system命名空间下查看:

查看Node资源消耗:

kubectl top node <node name>

查看Pod资源消耗:

kubectl top pod <pod name>

查看cpu和内存的使用情况:

查看metrics-server的状态true正常

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【K8s】Kubernetes 常用命令、对象名称缩写汇总
笔者在之前的文章中已经陆续介绍过 Kubernetes 的部分命令,本文将专题介绍 Kubernetes 的常用命令,处理日常工作基本够用了。
行者Sun
2024/09/02
5710
【K8s】Kubernetes 常用命令、对象名称缩写汇总
kubernetes-核心概念及创建应用(六)
•Kubernetes是Google在2014年开源的一个容器集群管理系统,Kubernetes简称K8S。 •K8S用于容器化应用程序的部署,扩展和管理。 •K8S提供了容器编排,资源调度,弹性伸缩,部署管理,服务发现等一系列功能。 •Kubernetes目标是让部署容器化应用简单高效。 官方网站:http://www.kubernetes.io
yuezhimi
2020/09/30
4000
kubernetes-核心概念及创建应用(六)
Kubernetes(k8s)中dashboard的部署。
1、k8s的dashboard的安装部署,首先需要将压缩包下载下来,然后进行解压缩操作。
别先生
2020/06/24
1.1K0
Kubernetes(k8s)中dashboard的部署。
kubernetes(八) kubernetes的使用
1、[preflight] 检查环境是否满足条件 2、[kubelet-start] 启动kubelet 3、[certs] /etc/kubernetes/pki 生成apiserver和etcd两套证书 4、[kubeconfig] 连接apiserver的配置文件 5、[control-plane] 静态Pod /etc/kubernetes/manifests 6、[etcd] 静态pod启动etcd 7、[upload-config] 将kubeadm配置存放到kube-system configmap 8、[kubelet] 将kkubelet配置存放到kube-system configmap 9、[mark-control-plane] node-role.kubernetes.io/master='' 说明master节点不调度pod 10、[bootstrap-token] 为kubelet自动颁发证书机制 11、安装插件 CoreDNS kube-proxy
alexhuiwang
2020/09/23
8220
kubernetes(八) kubernetes的使用
kubernetes核心概念
Pod是一组紧密关联的容器集合,支持多个容器在一个Pod中共享网络和文件系统,可以通过进程间通信和文件共享这种简单高效的方式完成服务,是Kubernetes调度的基本单位。Pod的设计理念是每个Pod都有一个唯一的IP。
章工运维
2023/06/16
2350
Docker集群编排工具之Kubernetes(K8s)介绍、安装及使用
K8s基础原理 k8s中文社区:https://www.kubernetes.org.cn/ 简介 Kubernetes与较早的集群管理系统Mesos和YARN相比,对容器尤其是 Docker的支持更加原生,同时提供了更强大的机制实现资源调度,自动 管理容器生命周期,负载均衡,高可用等底层功能,使开发者可以专注于开发应用。 Kubernetes是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用
863987322
2018/03/29
5.1K0
Docker集群编排工具之Kubernetes(K8s)介绍、安装及使用
Kubernetes全栈架构师(资源调度上)--学习笔记
Replication Controller(复制控制器,RC)和ReplicaSet(复制集,RS)是两种简单部署Pod的方式。在生产环境中,主要使用更高级的Deployment等方式进行Pod的管理和部署。
郑子铭
2021/08/01
6860
Kubernetes全栈架构师(资源调度上)--学习笔记
Kubernetes(k8s)的deployment资源
答:deployment也是保证pod高可用的一种方式,明明已经有RC(Replication Controller),为什么还要引入deployment呢?是因为deployment解决了RC(Replication Controller)的一个痛点。是因为RC在进行版本升级的时候,会造成一个问题,就是它的svc(Service)短时间内访问不了了,deployment就是解决这个问题的。
别先生
2020/06/23
9460
Kubernetes(k8s)的deployment资源
使用Kubernetes管理Docker集群
Kubernetes是一个来管理容器化应用程序的开源平台。如果您使用Docker将应用部署到多个服务器节点上,Kubernetes集群就可以管理您的服务器和应用,包括扩展、部署和滚动更新等操作。
苏易北
2018/09/20
8.7K0
使用Kubernetes管理Docker集群
Kubernetes集群之熟悉kubectl基础命令
管理K8S资源的三种基本方法 陈述式管理方法——命令行CLI工具 声明式管理方法——统一资源配置清单(mainfest) GUI式管理方法——web页面(dashboard) kubectl命令行 kubernetes集群管理集群资源的唯一入口式通过相应的方法调用apiserver的接口 kubectl是官方的CLI命令行工具,用于与apiserver进行通信,将用户在命令行输入的命令,组织并转化为apiserver能识别的信息,进而实现管理K8S各种资源的一种有效途径 陈述式资源管理方法 基础管理 查看名
王先森sec
2023/04/24
3620
Kubernetes实战之部署ELK Stack收集平台日志
ELK是Elasticsearch、Logstash、Kibana三大开源框架首字母大写简称。市面上也被成为Elastic Stack。其中Elasticsearch是一个基于Lucene、分布式、通过Restful方式进行交互的近实时搜索平台框架。像类似百度、谷歌这种大数据全文搜索引擎的场景都可以使用Elasticsearch作为底层支持框架,可见Elasticsearch提供的搜索能力确实强大,市面上很多时候我们简称Elasticsearch为es。Logstash是ELK的中央数据流引擎,用于从不同目标(文件/数据存储/MQ)收集的不同格式数据,经过过滤后支持输出到不同目的地(文件/MQ/redis/elasticsearch/kafka等)。Kibana可以将elasticsearch的数据通过友好的页面展示出来,提供实时分析的功能。
没有故事的陈师傅
2019/12/11
5.7K0
不背锅运维:一文搞清楚应用发布到k8s集群的基本流程
下面演示通过get命令来得到yaml文件,使用-o来指定yaml的格式输出,其他资源也是这个套路
不背锅运维
2023/01/26
8201
不背锅运维:一文搞清楚应用发布到k8s集群的基本流程
《Kubernetes》- 认识下Pod的管理者?
大家好,我是小菜,前面几篇文章我们已经从 k8s 集群的搭建然后到 k8s 中NameSpace 再说到了 k8s 中 Pod 的使用,如果还干到意犹未尽,那么接下来的 Pod 控制器 同样是一道硬菜!死鬼~看完记得给我来个三连哦!
蔡不菜丶
2021/05/18
6170
《Kubernetes》- 认识下Pod的管理者?
Kubernetes K8S之kubectl命令详解及常用示例
1、command:指定在一个或多个资源上要执行的操作。例如:create、get、describe、delete、apply等
踏歌行
2020/10/15
21.2K0
kubernetes系列教程(三)kubernetes快速入门
kubernetes中涉及很多概念,包含云生态社区中各类技术,学习成本比较高,k8s中通常以编写yaml文件完成资源的部署,对于较多入门的人来说是个较高的门坎,本文以命令行的形式带领大家快速入门,俯瞰kubernetes核心概念,快速入门。
HappyLau谈云计算
2019/08/12
6.4K0
kubernetes系列教程(三)kubernetes快速入门
K8S基础搭建使用
由上可见,需要本地镜像仓库需要 pod-infrastructure:latest 这个 pod 基础镜像,所以需要在拉取镜像 docker pull tianyebj/pod-infrastructure,并且 push 到本地镜像仓库
cuijianzhe
2022/06/14
5770
K8S基础搭建使用
【云原生、k8s】基于Helm管理Kubernetes应用
Minikube是一个工具,可以在本地快速运行一个单点的Kubernetes,尝试Kubernetes或日常开发的用户使用。不能用于生产环境。
人间打气筒
2023/08/18
9662
【云原生、k8s】基于Helm管理Kubernetes应用
Kubernetes 编排系统
1.1 Kubernetes简介 1.1.1 什么是Kubernetes Kubernetes (通常称为K8s,K8s是将8个字母“ubernete”替换为“8”的缩写) 是用于自动部署、扩展和管理
惨绿少年
2018/03/30
3.1K1
kubernetes | 杂记
基于centos7.9,docker-ce-20.10.18,kubelet-1.22.3-0
Amadeus
2022/10/25
2950
将项目迁移到kubernetes平台是怎样实现的?
一般运维人员都是提前将镜像做好,而开发人员就能直接拿这个镜像去用,这个镜像一定要符合现在环境部署的环境。
kubernetes中文社区
2020/12/17
1.6K0
将项目迁移到kubernetes平台是怎样实现的?
相关推荐
【K8s】Kubernetes 常用命令、对象名称缩写汇总
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档