kubernetes (k8s)的使用

一、kubernetes 简介 

谷歌2014年开源的管理工具项目,简化微服务的开发和部署。
提供功能:自愈和自动伸缩、调度和发布、调用链监控、配置管理、Metrics监控、日志监控、弹性和容错、API管理、服务安全等。
官网:https://kubernetes.io/zh-cn/
GitHub地址:https://github.com/kubernetes/kubernetes

1.1、Kubernetes 主要功能 

1.自我修复:当某个容器崩溃时,能够在1秒左右迅速启动新的容器2.弹性伸缩:根据需要,自动对集群中正在运行的容器数量进行调整3.服务发现:服务可以通过自动发现的形式找到它所依赖的服务4.负载均衡:当一个服务起动了多个容器,能够自动实现请求的负载均衡5.版本回退:当发现新发布的程序版本有问题,可以立即回退到原来的版本6.存储编排:根据容器自身的需求自动创建存储卷,Pod中容器之间共享数据

1.2、Kunbernetes 主要概念 

1.Master:集群控制节点,每个集群需要至少一个master节点负责集群的管控2.Node:工作负载节点,由master分配容器到这些node工作节点上,然后node节点上的docker负责容器的运行3.Pod:kubernetes的最小控制单元,容器都是运行在pod中的,一个pod中可以有1个或者多个容器4.Controller:控制器,通过它来实现对pod的管理,比如启动pod、停止pod、伸缩pod的数量等等5.Service:pod对外服务的统一入口,下面可以维护者同一类的多个pod6.Label:标签,用于对pod进行分类,同一类pod会拥有相同的标签7.NameSpace:命名空间,用来隔离pod的运行环境

1.3、组件  

一个kubernetes集群主要是由控制节点(master)、工作节点(node)构成,每个节点上都会安装不同的组件。

1.Master:负责集群的决策管理2.ApiServer : 资源操作的唯一入口,接收用户输入的命令,提供认证、授权、API注册和发现等机制3.Scheduler : 负责集群资源调度,按照预定的调度策略将Pod调度到相应的node节点上4.ControllerManager : 负责维护集群的状态,比如程序部署安排、故障检测、自动扩展、滚动更新等5.Etcd:负责存储集群中各种资源对象的信息6.Node:负责为容器提供运行环境7.Kubelet : 负责维护容器的生命周期,即通过控制docker,来创建、更新、销毁容器8.KubeProxy : 负责提供集群内部的服务发现和负载均衡9.Docker : 负责节点上容器的各种操作

1.3.1、节点组成 

1.master 主节点 

Etcd:整个集群的数据库,存储集群的状态数据、配置、节点等,采用 Raft 协议。
API-server:连其它组件、Etcd,提供各类 api 处理,和 Node节点 通信等。对外提供操作和获取 k8s 集群资源的 API。
Scheduler:在 k8s 集群中做调动决策,负责资源的调度、打分、分配资源。
Controller-Manager:控制各类 Controller,观察、维护集群的状态,故障检测、自动扩展、滚动更新等,协调让实际状态和预期状态达到一致。

2.work 从节点

Docker:负责容器创建和管理。
Kubelet:管理容器的生命周期,与 master 节点交互(汇报自身情况)。
Kube-proxy:网络代理,Pod 寻址、负载均衡等。

1.4、工作流程 

1.当kubernetes启动后,master和node将自身的信息存储到etcd数据库中;2.一个服务的安装请求会首先被发送到master节点的apiServer组件;3.apiServer调用scheduler组件来决定服务安应该装到哪个node节点上;从etcd中读取各个node节点的信息;4.apiServer调用controller-manager去调度Node节点安装服务;5.kubelet接收到指令后,会通知docker,由docker来启动一个服务pod;6.访问服务要通过kube-proxy来对pod产生访问的代理,如此就可以访问集群中的服务了。

二、使用 

2.1、常用命令

# 查看命令
kubectl --help# 查询k8s集群节点
kubectl get nodes# 查看所有的pod
kubectl get pod# 查看pod详细内容
kubectl describe pod nginx-6867cdf567-ht2bz# 查看k8s 集群的信息
kubectl cluster-info# 查看当前k8s 集群的版本
kubectl version #命令形式创建一个namespace
kubectl create namespace udiannet-dev# 查询所有的namespace
kubectl get ns# 在udiannet-dev的namespace 下运行一个pod
kubectl run pod --image=nginx -n udiannet-dev# 查看udiannet-dev下的pod
kubectl get pod -n udiannet-dev# 查看该pod的详细信息(要制定namespace)
kubectl describe pod pod-864f9875b9-492tz -n udiannet-dev# 删除该pod(要指定namespace)
kubectl delete pods pod-864f9875b9-492tz -n udiannet-dev# 创建一容器镜像为 nginx 名称为 nginx-test 的 Pod 并在 8080 端口将其暴露为与Pod 同名的 Service
kubectl run nginx-test --image=nginx --port=8080 --expose

NameSpace的创建 

# 创建一个namespace
[k8s@administrator root]$ kubectl create namespace test
namespace/test created# 查看namespace
[k8s@administrator root]$ kubectl get ns
NAME                   STATUS   AGE
default                Active   3d3h
kube-node-lease        Active   3d3h
kube-public            Active   3d3h
kube-system            Active   3d3h
test                   Active   8s# 创建并运行一个nginx的Pod资源
[k8s@administrator root]$ kubectl run nginx-pod --image=nginx -n test
pod/nginx-pod created# 查看test命名空间下新创建的pod
[k8s@administrator root]$ kubectl get pod -n test
NAME        READY   STATUS    RESTARTS   AGE
nginx-pod   1/1     Running   0          8s# 查看默认namespace中的资源
[k8s@administrator root]$ kubectl get pods
No resources found in default namespace.# 删除指定的pod
[k8s@administrator root]$ kubectl delete pod nginx-pod -n test
pod "nginx-pod" deleted# 删除命名空间
[k8s@administrator root]$ kubectl delete ns test
namespace "test" deleted# 查看命名空间
[k8s@administrator root]$ kubectl get ns
NAME                   STATUS   AGE
default                Active   3d3h
kube-node-lease        Active   3d3h
kube-public            Active   3d3h
kube-system            Active   3d3h# 查看某个NS,同时指定输出格式,常用格式:wide、json、yaml
[k8s@administrator ~]$ kubectl get ns default -o json
{"apiVersion": "v1","kind": "Namespace","metadata": {"creationTimestamp": "2022-03-21T09:00:52Z","labels": {"kubernetes.io/metadata.name": "default"},"name": "default","resourceVersion": "212","uid": "2c41f796-922b-426c-a5f4-78627e008e6b"},"spec": {"finalizers": ["kubernetes"]},"status": {"phase": "Active"}
}# 查看ns详情
[k8s@administrator ~]$ kubectl describe ns default
Name:         default
Labels:       kubernetes.io/metadata.name=default
Annotations:  <none>
Status:       ActiveNo resource quota.No LimitRange resource.

2.2、安装(CentOS 7)

2.2.1、防火墙操作命令

service iptables start 开启防火墙
service iptables stop 关闭防火墙
service iptables status 查看防火墙状态
chkconfig iptables on 防火墙开机自启
chkconfig iptables off 禁止开机自启
chkconfig iptables status 查看是否为开机自启
systemctl start firewalld 开启防火墙
systemctl stop firewalld 关闭防火墙
systemctl status firewalld 查看防火墙状态
systemctl enable firewalld 防火墙开机自启
systemctl disable firewalld 禁止开机自启
systemctl is-enabled firewalld 查看是否为开机自启

2.2.2、安装软件、配置主节点

1.安装 Docker 和 Kubernetes 组件
# 安装 Docker
sudo yum install docker -y
sudo systemctl enable docker.service
sudo systemctl start docker.service
# 安装 Kubernetes 组件
sudo yum install kubeadm kubelet kubectl -y
sudo systemctl enable kubelet.service
sudo systemctl start kubelet.service
2.配置防火墙
# 打开必要的端口
sudo firewall-cmd --permanent --add-port=6443/tcp
sudo firewall-cmd --permanent --add-port=2379-2380/tcp
sudo firewall-cmd --permanent --add-port=10250/tcp
sudo firewall-cmd --permanent --add-port=10251/tcp
sudo firewall-cmd --permanent --add-port=10252/tcp
sudo firewall-cmd --permanent --add-port=10255/tcp
sudo firewall-cmd --reload
3.配置 Kubernetes 主节点
sudo kubeadm init --apiserver-advertise-address=192.168.1.100 --pod-network-cidr=10.244.0.0/16

2.2.3、安装和配置网络插件

1.安装网络插件
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
2.确认网络插件运行状态,出现 flannel 相关的 Pod,则插件安装成功。
kubectl get pods --all-namespaces

2.2.4、添加工作节点

1.在主节点上生成 kubeadm join 命令的 Token
sudo kubeadm token create --print-join-command
2.在工作节点上运行 kubeadm join 命令
sudo kubeadm join <master-node-ip>:6443 --token <token-value> --discovery-token-ca-cert-hash sha256:<hash-value>

2.2.5、部署POD

1.编写 Pod 配置文件 
apiVersion: v1
kind: Pod
metadata:name: example
spec:containers:- name: nginximage: nginx:latestports:- containerPort: 80
2.部署 Pod 
kubectl apply -f example-pod.yaml
3.确认 Pod 运行状态 
kubectl get pods

2.3、项目里应用 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/188975.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

KubeSphere v3.4.0 部署K8S Docker + Prometheus + grafana

KubeSphere v3.4.0 部署K8S 1、整体思路2、修改linux主机名3、 离线安装3.1 问题列表3.2 执行命令成功列表 1、整体思路 将KubeSphere v3.4.0 安装包传输到其中一台机器修改Linux主机名&#xff08;选取3台&#xff0c;修改为master01、master02、master03&#xff09;安装官方…

2023-11-12 LeetCode每日一题(Range 模块)

2023-03-29每日一题 一、题目编号 715. Range 模块二、题目链接 点击跳转到题目位置 三、题目描述 Range模块是跟踪数字范围的模块。设计一个数据结构来跟踪表示为 半开区间 的范围并查询它们。 半开区间 [left, right) 表示所有 left < x < right 的实数 x 。 实…

Java必刷入门递归题×5(内附详细递归解析图)

目录 1.求N的阶乘 2.求12...N的和 3.顺序打印数字的每一位 4.求数字的每一位之和 5.求斐波拉契数列 1.求N的阶乘 &#xff08;1&#xff09;解析题目意思 比如求5的阶乘&#xff0c;符号表示就是5&#xff01;&#xff1b;所以5&#xff01;5*4*3*2*1我们下面使用简单的…

Android中Toast与Snack

1. Toast : 使用Toast类的makeText()方法创建Toast对象&#xff0c;makeText()方法有两个参数&#xff0c;第一个参数为显示Tosat的上下文环境&#xff0c;第二个参数为显示时长&#xff08; Toast.LENGTH_LONG 或 Toast.LENGTH_SHORT &#xff09;。 使用Toast类的show()方法…

【ubuntu 快速熟悉】

ubuntu 快速熟悉 2.ubuntu桌面管理器3.ubuntu常见文件夹说明4.ubuntu任务管理器4.1 gnome桌面的任务管理器4.2 实时监控GPU4.3 top 命令 5.ubuntu必备命令5.1 .deb文件5.2 查找命令5.2.1 find文件搜索5.2.2 which查找可执行文件的路径5.2.3 which的进阶&#xff0c;whereis5.2.…

【Spring】SpringBoot配置文件

文章目录 1. 配置文件格式2. properties 配置⽂件说明2.1 properties 基本语法2.2 读取配置文件2.3 properties 缺点分析 3. yml 配置文件说明3.1 yml 基本语法3.2 读取配置文件3.3 PostConstruct 注解3.4 配置null和空格3.5 value值加单双引号3.6 配置对象3.7 配置集合3.8 配置…

环形链表解析(c语言)c语言版本!自我解析(看了必会)

目录 1.判断一个表是否是环形链表&#xff01; 代码如下 解析如下 2.快指针的步数和慢指针的步数有什么影响&#xff08;无图解析&#xff09; 3.怎么找到环形链表的入环点 代码如下 解析如下 1.判断一个表是否是环形链表&#xff01; 代码如下 bool hasCycle(struct L…

Leetcode—69.x的平方根【简单】

2023每日刷题&#xff08;二十七&#xff09; Leetcode—69.x的平方根 直接法实现代码 int mySqrt(int x) {long long i 0;while(i * i < x) {i;}if(i * i > x) {return i - 1;}return i; }运行结果 二分法实现代码 int mySqrt(int x) {long long left 0, right (l…

自动化测试(Java+eclipse)教程

webdriver环境配置 1.下载chromedriver到本地&#xff08;一定要选择和自己浏览器相对应的版本chromedriver下载地址&#xff09; 2.加入到环境变量path中 webdriver工作原理 创建web自动化测试脚本 1.Maven项目创建 File->New->project->(搜索maven)选择maven pr…

功能案例 -- 通过开关,改变白天和黑夜

效果展示 代码展示 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><style>:root {--default-bac-color: #f…

会员题-力扣408-有效单词缩写

有效单词缩写 字符串可以用 缩写 进行表示&#xff0c;缩写 的方法是将任意数量的 不相邻 的子字符串替换为相应子串的长度。例如&#xff0c;字符串 “substitution” 可以缩写为&#xff08;不止这几种方法&#xff09;&#xff1a; “s10n” (“s ubstitutio n”) “sub4…

基于STM32单片机抢答器设计

**单片机设计介绍&#xff0c; 基于STM32单片机抢答器设计-Proteus仿真 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于STM32单片机的抢答器设计可以用于教育和培训场景中的抢答游戏或考试环节。以下是一个基本的介绍设计步骤…

手摸手入门Springboot+Grafana10.2接收JSON

JSON&#xff08;JavaScript Object Notation, JS对象简谱&#xff09;是一种轻量级的数据交换格式。它基于 ECMAScript&#xff08;European Computer Manufacturers Association, 欧洲计算机协会制定的js规范&#xff09;的一个子集&#xff0c;采用完全独立于编程语言的文本…

2013年108计网

第33题 在 OSI 参考模型中, 下列功能需由应用层的相邻层实现的是()A. 对话管理B. 数据格式转换C. 路由选择D. 可靠数据传输 很显然&#xff0c;题目所问的应用层的相邻层是表示层。该层实现与数据表示相关的功能。选项a中的对话管理属于会话层。选项c中的路由选择属于网络层。…

Maven Profile组设置

application.properties中xxxx

统一消息分发中心设计

背景 我们核心业务中订单完成时&#xff0c;需要完成后续的连带业务&#xff0c;扣件库存库存、增加积分、通知商家等。 如下图的架构&#xff1a; 这样设计出来导致我们的核心业务和其他业务耦合&#xff0c;每次新增连带业务或者去掉连带业务都需要修改核心业务。 一方面&…

UPLAOD-LABS2

less7 任务 拿到一个shell服务器 提示 禁止上传所有可以解析的后缀 发现所有可以解析的后缀都被禁了 查看一下源代码 $is_upload false; $msg null; if (isset($_POST[submit])) {if (file_exists($UPLOAD_ADDR)) {$deny_ext array(".php",".php5&quo…

网络安全深入学习第八课——反向代理(工具:frp)

文章目录 一、实验环境二、实验要求三、开始模拟1、攻击机配置frp文件2、攻击拿下跳板机&#xff0c;并且上传frpc.ini、frpc.exe、frpc_full.ini文件3、把frps.ini、、frps.exe、frps_full.ini文件放到VPS主机上4、VPS机开启frp5、跳板机开启frp6、验证 一、实验环境 攻击机&…

numpy 基础使用

NumPy是Python中科学计算的基础包。它是一个Python库&#xff0c;提供多维数组对象&#xff0c;各种派生对象&#xff08;如掩码数组和矩阵&#xff09;&#xff0c;以及用于数组快速操作的各种API&#xff0c;有包括数学、逻辑、形状操作、排序、选择、输入输出、离散傅立叶变…

Typescript -尚硅谷

基础 1.ts是以js为基础构建的语言&#xff0c;是一个js的超集(对js进行了扩展)&#xff1b; 2.ts(type)最主要的功能是在js的基础上引入了类型的概念; Js的类型是只针对于值而言&#xff0c;ts的类型是针对于变量而言 Ts可以被编译成任意版本的js&#xff0c;从而进一步解决了…