IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> k8s快速入门 -> 正文阅读

[系统运维]k8s快速入门

目录

K8S的目标

K8S是啥

容器如何管理?

pod是啥?

举例

Pause容器

K8S核心组件介绍

ReplicationController:副本控制器

ReplicaSet:副本控制器

Deployment

HPA

StatefullSet

DaemonSet

Label

服务发现

集群安装

操作

前提?

K8s命令分三类

常用命令(master节点)

举例1:创建pod,pod里运行一个tomcat容器

举例2:对上面的pod进行扩容

举例3:彻底删除上面的pod

举例4:创建service

结尾


K8S的目标

降低运维成本

注:学习k8s之前一定要熟练使用docker。

K8S是啥

一种容器管理技术。

容器如何管理?

引入pod机制,通过pod来管理容器。

pod是啥?

一个逻辑分组,在pod中存在1个或多个容器,在pod中会部署一组相关的服务为啥要是相关的?为了减少网络开销。pod有自己的主机名、IP地址。pod是k8s能操作的最基本的单位。

举例

我们的系统awp)要部署上线(通过容器),先准备好我们项目的镜像,然后通过k8s来进行管理通过k8s创建pod

我们访问一个master节点(服务器),我们的请求会调度到一个Node节点(linux服务器),创建一个pod(逻辑分组)。我们的项目镜像会在pod里创建一个容器。

注:

  1. node节点有自己的IP,pod有自己的IP,通过镜像创建的容器有自己的IP。
  2. 一个镜像一个服务
  3. 系统如果要集群,就是多个pod的副本

Pause容器

创建pod时会自动创建一个pause容器,其它容器共享pause的存储和网络。

其它容器通过localhost相互访问。

K8S核心组件介绍

ReplicationController:副本控制器

举例:3个pod内都部署了tomcat,就是3个副本,相当于3个tomcat集群。

集群的预期数量由页面或配置文件或命令来指定。

如果一个挂掉,会自动再创建一个,保证服务高可用。

ReplicaSet:副本控制器

本质跟ReplicationController差不多,新版本的K8S建议用ReplicSet取代ReplicationController

区别:

ReplicationController做pod选择器的时候,只支持单选。(筛选pod)

ReplicSet还能支持复选。(筛选pod)

注:pod可以加标签,通过标签进行筛选

Deployment

Deployment为pod和ReplicSet提供了一个声明式定义方法,用来替代ReplicationController

建议使用Deployment来自动管理ReplicSet

可理解为Deployment对ReplicSet进行了一个封装

应用场景:

滚动更新:发布新版本应用的时候,Deployment会重新创建ReplicSet,再由ReplicSet创建新的pod

做到不停机发布新版本程序。

回滚应用:如果发版失败,可以回滚。

举例:如果v2版本不好用,可以迅速回滚到v1版本的程序。

扩容和缩容:增加pod或者删除pod

HPA

监控pod的CPU使用率,如果利用率过高,自动扩容。

StatefullSet

创建集群,就是创建多个pod副本,大部分的服务是无状态的,比如tomcat服务集群。

通过容器部署,适合那些无状态的服务。

无状态:

没有数据需要实时的保留

有状态:

需要实时的数据更新和存储

举例理解:如果集群里的一个服务器抽离出去,再加回来,不影响用户使用的话,就是无状态服务,比如tomcat或nginx,数据库不行,所以数据库服务是有状态服务。

引申:docker容器主要面向无状态服务,可以用来部署项目的应用服务,一般不用来部署数据存储服务。但是有了k8s的StatefullSet组件,docker容器就可以部署有状态服务。

比如:

有序部署→我们审计系统部署,先部署数据库,再部署Redis,再部署应用程序,最后部署nginx

有序删除→先删除nginx,再应用程序,再Redis,最后数据库

DaemonSet

确保每个node都至少存在一个pod

Label

K8s里所有对象都可以打标签(标识),一个资源对象可以定义任意数量标签。实质是一系列的键值对

没有标签,就无法找到一组相关的pod,也就无法实现负载均衡。

标签举例:

版本标签:”release”:”stable”

环境标签:”environment”:”dev”,”environment”:”server”

服务发现

在此不讲

集群安装

在此不讲

操作

前提?

K8s默认是要开机自动启动的

服务器上已经安装了docker,Docker默认开机自启动

K8s命令分三类

陈述式:命令(指令)

陈述式对象配置:命令(指令)+资源配置文件

声明式:编写yaml文件

我只介绍陈述式

常用命令(master节点)

docker ps 看一下docker启动没有

docker images 看一下k8s的镜像有没有

一般会有以下

k8s.gcr.io/kube-apiserver

k8s.gcr.io/kube-proxy

k8s.gcr.io/kube-scheduler

k8s.gcr.io/kube-controller-manager

k8s.gcr.io/kube-etcd

k8s.gcr.io/coredns

k8s.gcr.io/pause

kubectl get node 查看集群节点,看节点是否已经启动

状态正常应该是Ready

kubectl get pod 查看集群运行的pod

kubectl get pod -n kube-system -o wide ?查看k8s相关的pod

-n 命名空间,不指定,命名空间默认为default

-o 输出

wide 详细信息

状态为Running,正常

状态为Pending,可能有些依赖还没运行

状态为CrashLoopBackOff,重启

kubectl create -f kube-flannel.yml ??创建yaml文件

kubectl apply -f kube-flannel.yml ???应用yaml文件,会下载一些组件

在node节点执行

kubeadm join master的ip:端口号 --token xxxxxxx --discovery-token-ca-cert-hash xxxxxxx

加入master节点(加入到集群)

举例1:创建pod,pod里运行一个tomcat容器

实际操作:

在master节点下

kubectl run my-tomcat --image=tomcat --port=8080

执行后正常应该显示deployment.apps/my-tomcat created

再执行kubectl get pod -o wide看一下状态,也顺便看一下运行在集群的哪个节点

kubectl get rs ?正常应该显示my-tomcat-xxxxx .....

kubectl get deployment ?正常应该显示my-tomcat .....

结合Deployment组件介绍的那张图来执行命令

注:

这个my-tomcat是deployment的名称

没有指定pod副本数量,默认只创建一个pod副本

镜像会被放到某个节点下,这样很low,应该有统一的镜像仓库

kubectl run my-tomcat --image=tomcat:v2 --port=8080 --replicas=3

使用v2版本的tomcat镜像,创建3个副本

举例2:对上面的pod进行扩容

kubectl scale deployment my-tomcat --replicas=3 ??把pod扩展为3个副本

注:直接删除任意一个pod副本是删除不了的,又会自动创建出来

举例3:彻底删除上面的pod

kubectl delete deployment my-tomcat

注:如果没有自动删除rs和pod,手动再删除一下rs和pod

举例4:创建service

kubectl expose deployment/my-tomcat --port=30000 --target=8080 ?同时会产生一个yaml文件

kubectl get svc -o wide ?查看service

kubectl edit svc/my-tomcat ?编辑刚才创建的yaml文件

把type由ClusterIP改为NodePort,意思是说把30000这个端口映射到物理机上

再执行一下kubectl get svc,看一下冒号后面那个端口号

IP加上这个端口号,就能用浏览器访问了。

结尾

此文章内容只是我学习k8s的一个粗略总结,各种细节无法涉及,希望对大家有所帮助。也希望大家能指出我的问题。

?

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-09-12 13:32:23  更:2021-09-12 13:34:42 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 15:00:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码