栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

K8s 学习笔记

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

K8s 学习笔记

文章目录
        • 第一章 k8s 介绍
          • 应用部署方式的演变
          • K8s 简介
          • k8s 组件
          • k8s 中的一些概念
        • k8s 安装
          • k8s 集群介绍
          • k8s 安装方式
          • k8s 部署应用
        • k8s 资源管理
          • 资源管理介绍
          • 资源管理方式

第一章 k8s 介绍 应用部署方式的演变

传统部署: app 直接在操作系统之上进行部署。

虚拟化部署: 一台物理机上虚拟化多个虚拟机。 每个虚拟机都是独立的环境。

容器化部署: 与虚拟化相似,但共享了操作系统。

虚拟化部署,与容器化部署程序直接相互隔离,但是虚拟化每个隔离之间都需要操作系统,比较消耗系统的资源。

容器化部署可以跨云服务商,跨linux 操作系统进行发布。且每个容器拥有自己的文件系统,cpu,内存,进程空间。app 所需要的资源由容器来提供。

容器存在的问题:

1 一个容器故障宕机了,如何让另外一个容器去替补停机的容器。

2 当并发量增大的时候,如何去横向扩展容器的数量。

容器管理的问题可以统称为容器的编排问题,k8s: google开源的容器编排工具。

SWarm : docker 自己的编排工具。

K8s 简介

k8s 的本质是一组服务器集群,在集群的每一个节点上运行特定的程序。对节点中的容器进行管理。目的是实现资源管理的自动化。

k8s 组件

一个k8s 集群是由控制节点(master)和 工作节点(node ),每个节点上都会安装不同的组件。


举例说明,向ApiServer 发送请求,请求运行一个nginx,则通过Scheduler 进行计算,Controller-manager进行调度,假设nginx 服务运行在pod 节点上了。Etecd 记录nginx 服务相关元数据。

一旦k8s环境启动之后,master 和node 都会将自身的信息存储到etcd 数据库中

Node 节点正真干活的(工作负载节点,node 节点上的docker 负责容器的运行), kubelet 接受控制节点发送过来的信息,将信息发送给相应的docker,来执行各种操作。

kube-proxy 客户端访问接口。一个nginx 服务运行了,如果要访问nginx ,就需要kube-proxy 来对pod 产生访问的代理。

k8s 中的一些概念

pod 是k8s 中的最小控制单元, 容器必须跑到pod 中。pod 中至少要有一个容器 k8s 是通过控制pod,然后再去控制容器的。

Controller: k8s 中有各种类型的 Controller。

Label 标签: 用于对pod 进行分类,同一类pod 会拥有相同的标签。

Service: pod 对外服务的统一入口

NameSpace: 命名空间,用来隔离pod 的运行环境。Docker 也使用namspce 来隔离环境

k8s 安装

如果无法启动多个集群,建议使用官网的交互式环境。

k8s 集群介绍

k8s 集群一般分为两类,一主多从,和多主多从。

一主多从: 一个Master 节点,多个Node 节点,但存在单点故障等问题。常用于测试环境。

多主多从: 多个Mater节点,多个Node节点。搭建麻烦,但是安全性高,常用于生产环境。

k8s 安装方式

k8s 有多种部署方式,目前比较主流的方式有: kubeadm ,Minkube 二进制包

官网Minikube 部署方式

Minbikube: 用于快速搭建单节点的k8s 集群工具。

kubeadm: 一个用于快速搭建k8s集群工具。

二进制包: 从官网下载每个组件的二进制包,依次去安装,此方式对理解k8的组件更为有效。

Minikube 进行部署集群:

这里使用Minikube 进行部署集群。

下载minikube之后,输入下面命令。

1 minikube version

2 minikube start 启动k8s 集群

3 kubectl version

4 kubectl cluster-info

5 kubectl get nodes

kubeadm 安装 k8s 集群:

1 查看操作系统的版本,使用kubeadm 安装k8s集群,要求centos 的版本要在7.5 及以上。

​ cat /etc/redhat-release

2 主机名解析

​ 编辑三套服务器的 /etc/hosts 文件,添加服务器对应的ip地址和 主机名

​ [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2aFuXpwj-1636808215928)(D:java workstation笔记浪潮imagesimage-20211113194514224.png)]

3 时间同步

k8s 要求节点的时间要精确一致,这里使用chronyd 服务从网络中同步时间。

​ 3.1 启动 chronyd 服务命令 : systemctl start chronyd

​ 3.2 设置chronyd 服务开机自启动 : systemctl enable chronyd

4 禁用iptables 和firewalld 服务(生产环境才能做)(k8s 和docker 在运行中会产生大量iptables 规则,为了不跟系统的iptables 进行混淆,直接关闭系统的iptables)

​ systemctl stop firewalld

​ systemctl disable firewalld

​ systemctl stop iptables

​ systemctl disable iptables

k8s 部署应用

1 kubectl get nodes 获取节点信息(当前只有一个节点)

2 kubectl create deployment 命令部署k8s 应用

kubectl create deployment kubernetes-bootcamp --image=gcr.io/google-samples/kubernetes-bootcamp:v1

该命令部署的是 kubernetes-bootcamp应用。We need to provide the deployment name and app image location (include the full repository url for images hosted outside Docker hub).

3 kubectl get deployments 查看部署的应用

在单节点上的一个应用。

4 查看应用

Pods that are running inside Kubernetes are running on a private, isolated network.By default they are visible from other pods and services within the same kubernetes cluster, but not outside that network.

翻译: Kubernetes内部运行的pod运行在一个专用的隔离网络上。默认情况下,它们可以从同一Kubernetes集群内的其他pod和 service 中看到,但不能从该网络外部看到。

Thekubectlcommand can create a proxy that will forward communications into the cluster-wide, private network. The proxy can be terminated by pressing control-C and won't show any output while its running.

4.1 `“kubectl”命令可以创建一个代理,将通信转发到集群范围的专用网络。可以通过按control-C终止代理,并且在代理运行时不会显示任何输出。下面命令来生成一个代理。

echo -e “nnne[92mStarting Proxy. After starting it will not output a response. Please click the first Terminal Tabn”; kubectl proxy

4.2 通过代理我们的主机与k8s 集群产生了联系。代理的节点提供了一些api 可以通过下面命令看到。

curl http://localhost:8001/version

  1. 3暴露接口

默认情况下,所有 Pod 只能在集群内部访问。因此要想在外部访问的话,需要做一个映射。

把容器的8080端口映射到节点的端口

kubectl expose deployment/kubernetes-bootcamp

–type=“NodePort”

–port 8080

NodePort 的意思是可以集群外部的网络进行访问。

4.4 查看服务的状态 命令 :kubectl get pods service

k8s 资源管理 资源管理介绍

在k8s 中,所有内容都抽象为资源,用户需要通过操作资源来管理k8s。

k8s本质就是一个集群系统,用户可以在集群中部署各种服务,所谓部署服务就是在k8s 集群中运行一个个容器,并将指定的程序跑到容器中。

k8s 中最小的管理单位是pod 而不是容器,所以只能将容器放到pod 中,但是k8s一般不直接管理pod,而是通过pod 管理器 (Controller)来管理pod 的。

Pod 可以提供服务之后,就要考虑如何访问Pod 中的服务。K8s 提供了Service 资源实现了这个功能。

当然,pod中的程序的数据需要持久化,K8s 还提供了各种存储系统。

学习K8s的核心 就是学习如何对集群上的Pod,Pod控制器,Service,存储等各种资源进行操作。

资源管理方式

1 命令式对象管理: 直接使用命令去操作k8s 的各种资源

2 命令式对象配置:通过命令配置和配置文件去操作k8s 资源。

3 声明式对象配置: 通过apply 命令和配置文件去操作k8s 资源。

Pod 是 Kubernetes 抽象出来的,表示一组一个或多个应用程序容器(如 Docker),以及这些容器的一些共享资源。这些资源包括:

  • 共享存储,当作卷
  • 网络,作为唯一的集群 IP 地址
  • 有关每个容器如何运行的信息,例如容器映像版本或要使用的特定端口。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/489328.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号