【K8S】学习笔记(一)

news2024/12/28 17:48:53

K8S学习笔记

  • 一、Kubernetes
    • 1.1、K8S功能
    • 1.2、K8S架构组件
      • 1.2.1、架构细节
    • 1.3、K8S核心概念
      • 1.3.1、Pod
      • 1.3.2、Volume
      • 1.3.3、Controller
      • 1.3.4、Deployment
      • 1.3.5、Service
      • 1.3.6、Label
      • 1.3.7、Namespace
      • 1.3.8、API
  • 二、搭建K8S
    • 2.1、K8S搭建规划
      • 2.1.1、单master集群
      • 2.1.2、多master集群
    • 2.2、kubeadm方式安装
      • 2.2.1、系统初始化
      • 2.2.2、安装K8S
        • 2.2.2.1、安装 Docker
        • 2.2.2.2、安装 kubeadm,kubelet 和 kubectl
        • 2.2.2.2、部署 Kubernetes Mast
        • 2.2.2.3、安装 Pod 网络插件(CNI)
        • 2.2.2.4、测试 kubernetes

一、Kubernetes

kubernetes,简称K8s,是用8 代替8 个字符“ubernete”而成的缩写。是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes 的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes 提供了应用部署,规划,更新,维护的一种机制。

Kubernetes 积累了作为Google 生产环境运行工作负载15 年的经验,并吸收了来自于社区的最佳想法和实践。

1.1、K8S功能

  1. 自动装箱:基于容器对应用运行环境的资源配置要求自动部署应用容器
  2. 自我修复(自愈能力)
    当容器失败时,会对容器进行重启
    当所部署的Node节点有问题时,会对容器进行重新部署和重新调度
    当容器未通过监控检查时,会关闭此容器直到容器正常运行时,才会对外提供服务
    如果某个服务器上的应用不响应了,Kubernetes会自动在其它的地方创建一个
  3. 水平扩展:通过简单的命令、用户UI 界面或基于CPU 等资源使用情况,对应用容器进行规模扩大或规模剪裁
    当我们有大量的请求来临时,我们可以增加副本数量,从而达到水平扩展的效果
  4. 服务发现:用户不需使用额外的服务发现机制,就能够基于Kubernetes 自身能力实现服务发现和负载均衡
    对外提供统一的入口,让它来做节点的调度和负载均衡, 相当于微服务里面的网关
  5. 滚动更新:可以根据应用的变化,对应用容器运行的应用,进行一次性或批量式更新
    添加应用的时候,不是加进去就马上可以进行使用,而是需要判断这个添加进去的应用是否能够正常使用
  6. 版本回退:可以根据应用部署情况,对应用容器运行的应用,进行历史版本即时回退
  7. 密钥和配置管理:在不需要重新构建镜像的情况下,可以部署和更新密钥和应用配置,类似热部署
  8. 存储编排:自动实现存储系统挂载及应用,特别对有状态应用实现数据持久化非常重要
    存储系统可以来自于本地目录、网络存储(NFS、Gluster、Ceph 等)、公共云存储服务
  9. 批处理:提供一次性任务,定时任务;满足批量数据处理和分析的场景

1.2、K8S架构组件

在这里插入图片描述

1.2.1、架构细节

K8S架构主要包含两部分:Master(主控节点)和 node(工作节点)
K8S集群控制节点,对集群进行调度管理,接受集群外用户去集群操作请求;

master:主控节点

  • API Server:集群统一入口,以restful风格进行操作,同时交给etcd存储
    • 提供认证、授权、访问控制、API注册和发现等机制
  • scheduler:节点的调度,选择node节点应用部署
  • controller-manager:处理集群中常规后台任务,一个资源对应一个控制器
  • etcd:存储系统,用于保存集群中的相关数据

Work node:工作节点

  • Kubelet:master派到node节点代表,管理本机容器

    • 一个集群中每个节点上运行的代理,它保证容器都运行在Pod中
    • 负责维护容器的生命周期,同时也负责Volume(CSI) 和 网络(CNI)的管理
  • kube-proxy:提供网络代理,负载均衡等操作

  • 容器运行环境【Container Runtime

    • 容器运行环境是负责运行容器的软件
    • Kubernetes支持多个容器运行环境:Docker、containerd、cri-o、rktlet以及任何实现Kubernetes CRI (容器运行环境接口) 的软件。
  • fluentd:是一个守护进程,它有助于提升 集群层面日志

1.3、K8S核心概念

1.3.1、Pod

  • Pod是K8s中最小的单元
  • 一组容器的集合
  • 共享网络【一个Pod中的所有容器共享同一网络】
  • 生命周期是短暂的(服务器重启后,就找不到了)

1.3.2、Volume

  • 声明在Pod容器中可访问的文件目录
  • 可以被挂载到Pod中一个或多个容器指定路径下
  • 支持多种后端存储抽象【本地存储、分布式存储、云存储】

1.3.3、Controller

  • 确保预期的pod副本数量【ReplicaSet】
  • 无状态应用部署【Deployment】
    • 无状态就是指,不需要依赖于网络或者ip
  • 有状态应用部署【StatefulSet】
    • 有状态需要特定的条件
  • 确保所有的node运行同一个pod 【DaemonSet】
  • 一次性任务和定时任务【Job和CronJob】

1.3.4、Deployment

  • 定义一组Pod副本数目,版本等
  • 通过控制器【Controller】维持Pod数目【自动回复失败的Pod】
  • 通过控制器以指定的策略控制版本【滚动升级、回滚等】

1.3.5、Service

  • 定义一组pod的访问规则
  • Pod的负载均衡,提供一个或多个Pod的稳定访问地址
  • 支持多种方式【ClusterIP、NodePort、LoadBalancer】

1.3.6、Label

label:标签,用于对象资源查询,筛选

1.3.7、Namespace

命名空间,逻辑隔离

  • 一个集群内部的逻辑隔离机制【鉴权、资源】
  • 每个资源都属于一个namespace
  • 同一个namespace所有资源不能重复
  • 不同namespace可以资源名重复

1.3.8、API

我们通过Kubernetes的API来操作整个集群

同时我们可以通过 kubectl 、ui、curl 最终发送 http + json/yaml 方式的请求给API Server,然后控制整个K8S集群,K8S中所有的资源对象都可以采用 yaml 或 json 格式的文件定义或描述

如下:使用yaml部署一个nginx的pod

二、搭建K8S

2.1、K8S搭建规划

2.1.1、单master集群

在这里插入图片描述

2.1.2、多master集群

在这里插入图片描述

2.2、kubeadm方式安装

2.2.1、系统初始化

关闭防火墙:

systemctl stop firewalld #临时
systemctl disable firewalld # 永久

关闭 selinux

sed -i 's/SELINUX=enforcing/\SELINUX=disabled/' /etc/selinux/config # 永久【重启生效】
setenforce 0 # 临时

关闭 swap:

swapoff -a  # 临时
sed -ri 's/.*swap.*/#&/' /etc/fstab # 永久【重启生效】

在== master ==添加 hosts:

cat >> /etc/hosts << EOF
192.168.60.151 k8smaster
192.168.60.152 k8snode1
192.168.60.153 k8snode2
EOF

将桥接的 IPv4 流量传递到 iptables 的链:

cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

sysctl --system   # 生效

时间同步:

yum install ntpdate -y
ntpdate time.windows.com

2.2.2、安装K8S

2.2.2.1、安装 Docker

所有节点安装

Kubernetes 默认 CRI(容器运行时)为 Docker,因此先安装 Docker

#阿里云的yum源
cat >/etc/yum.repos.d/docker.repo<<EOF
[docker-ce-edge]
name=Docker CE Edge - \$basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/\$basearch/edge
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
EOF
#安装 docker
yum -y install docker-ce-18.06.1.ce-3.el7

#设置docker开机自启与启动docker
systemctl enable docker && systemctl start docker

# 查看 docker 版本
docker --version

docker 添加阿里云 YUM 软件源

cat >> /etc/docker/daemon.json << EOF
{
  "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]
}
EOF

2.2.2.2、安装 kubeadm,kubelet 和 kubectl

所有节点安装
添加 yum

# 配置 k8s 的 yum 源【阿里云】
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

# 安装 kubelet、kubeadm、kubectl,同时指定版本
yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0
# 设置开机自启【这里暂时先不启动 kubelet】
systemctl enable kubelet

2.2.2.2、部署 Kubernetes Mast

Master上执行

kubeadm init --apiserver-advertise-address=192.168.3.34 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.18.0 --service-cidr=10.96.0.0/12  --pod-network-cidr=10.244.0.0/16

由于默认拉取镜像地址 k8s.gcr.io 国内无法访问,这里指定阿里云镜像仓库地址。

安装成功会提示kubeadm 指令(每个人不一样),先复制下来到Node结点执行

kubeadm join 192.168.3.34:6443 --token jt1gaq.tvjxyy6bdbr70r95 \
    --discovery-token-ca-cert-hash sha256:68e7c5f64b6e15efe25421a17af0057d013e1f40f55138cb637552449e378be9 

#默认 token 有效期为 24 小时,当过期之后,该 token 就不可用了。这时就需要重新创建 token,操作如下:

Master上执行使用 kubectl 工具:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

Master上执行查看Node结点是否加进来

kubectl get node

在这里插入图片描述

2.2.2.3、安装 Pod 网络插件(CNI)

raw.githubusercontent.com的地址被污染先去ip查询查询ip
然后在hosts里添加185.199.108.xxx raw.githubusercontent.com

# 下载网络插件配置
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# 添加
kubectl apply -f kube-flannel.yml
# 等一会!
# ......
# 查看状态 【kube-system 是 k8s 中的最小单元】
kubectl get pods -n kube-system

嫌麻烦也有我自己下载好久才成功的配置
配置文件

2.2.2.4、测试 kubernetes

在 Kubernetes 集群中创建一个 pod,验证是否正常运行

kubectl create deployment nginx --image=nginx

如果我们出现 Running 状态的时候,表示已经成功运行了
在这里插入图片描述
需要将端口暴露出去,让其它外界能够访问

#暴露端口
kubectl expose deployment nginx --port=80 --type=NodePort
# 查看一下对外的端口
kubectl get pod,svc

在这里插入图片描述
访问地址:http://NodeIP:Port
eg:http://192.168.3.34:32698/

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Html5的新增特性

Html5的新增特性主要是针对以前的不足&#xff0c;增加了一些新的标签&#xff0c;新的表单和新的表单属性等。 这些新特性都有兼容性问题&#xff0c;基本是IE9以上版本的浏览器才支持&#xff0c;如果不考虑兼容性问题&#xff0c;可以大量使用这些新特性。 声明&#xff1…

m基于迫零ZF准则的通信均衡器的matlab仿真

目录 1.算法概述 2.仿真效果预览 3.MATLAB部分代码预览 4.完整MATLAB程序 1.算法概述 在数字通信系统中&#xff0c;码间串扰和加性噪声是造成信号传输失真的主要因素&#xff0c;为克服码间串扰&#xff0c;在接收滤波器和抽样判决器之间附加一个可调滤波器&#xff0c;用…

STM32CubeMX:串口DMA

DMA&#xff1a;直接储存区访问&#xff0c;DMA传输将数据从一个地址空间复制到另一个空间。DMA传输方式无需CPU直接控制传输&#xff0c;也没有中断处理方式那样保留现场和恢复现场过程&#xff0c;通过硬件为RAM何IO设备开辟一条直接传输数据的通道&#xff0c;从而可以提高C…

WSL下安装ubuntu 18.04 +meep进行FDTD仿真计算

WSL下安装ubuntu 18.04 meep进行FDTD仿真计算前言WSL安装过程打开虚拟环境下载Ubuntu并修改安装路径更改软件源MeepVScode远程访问测试程序前言 使用meep进行FDTD开发&#xff0c;开源。这里记录一下自己的安装过程&#xff0c;可以不安装在C盘&#xff0c;有助于后面进行修改…

【JVM】java的jvm类加载器和类加载子系统

JVM类加载器和类加载子系统一、JVM体系结构二、ClassLoader类介绍三、类加载子系统3.1 加载阶段3.1.1 引导类加载器&#xff08;Bootstrap ClassLoader&#xff09;3.1.2 扩展类加载器&#xff08;Extension ClassLoader&#xff09;3.1.3 应用程序类加载器&#xff08;Applica…

Android入门第32天-Android中的Alert Dialog的使用大全

写在我的第200篇博客中的“前言” 这篇是我的第200篇博客。落笔写正文前我感触彼深。自从一个小P孩那时写博客只是为了一时的好玩&#xff0c;到逐步发觉只有让越来越多的人理解了技术&#xff0c;把技术普及到门槛越来越低&#xff0c;才会反推技术人员的处镜越来越好。因为必…

Allegro如何输出STP文件操作指导

Allegro如何输出STP文件操作指导 Stp文件用于查看实物,Allegro支持输出STP格式的文件,下面介绍如何输出,操作步骤如下 选择File-export-STEP 根据自己的需要选择参数 如果需要输出电气过孔,选electronic hole,需要外层铜皮,勾选External Copper 常规默认值就可以了,…

UE5笔记【六】流明引擎Lumen简介;Lumen处理发光物体。

RealTimeGlobal illumination System。实时全局照明系统。 打开Lumen 从设置中&#xff0c;打开【项目设置】往下找【渲染Render】 然后再GI中将途中两项选择为Lumen。 同时需要一个后期处理量PostProcessVolume。刚好场景中有。 需要勾选【全局光照GI】中的【方法】选定为【…

Spring七天速成:入门必看(二)

-----持续更新Spring入门系列文章----- 如果你也喜欢Java和算法&#xff0c;欢迎订阅专栏共同学习交流&#xff01; 你的点赞、关注、评论、是我创作的动力&#xff01; -------希望我的文章对你有所帮助-------- 前言&#xff1a; 在前篇文章当中我们已经大概了解了Spring的…

QT布局之QGridLayout嵌套QHBoxLayout

搞嵌入式系统开发的&#xff0c;往往都是真全栈开发者。从硬件到驱动到操作系统到应用以及功能界面&#xff0c;是哪里需要搞哪里。这不&#xff0c;最近需要开发一个基于QT的界面功能&#xff0c;涉及到控件布局。因为不熟悉&#xff0c;走了一些弯路。这里将相关调试记录下来…

计算机网络面试题【面试】

计算机网络面试题前言OSI 七层网络模型应用层表示层会话层传输层网络层数据链路层物理七层总结输入URL后会发生什么1. DNS域名解析2. 三次握手建立TCP连接3. 发送HTTP网络请求4. 服务器处理请求5. 服务器返回响应6. 四次挥手断开TCP连接7. 解析HTMLDNS解析过程DNS解析&#xff…

Froala Editor JavaScript WYSIWYG HTML 编辑器

Froala Editor JavaScript WYSIWYG HTML 多用途、易于使用的 WYSIWYG 编辑器&#xff0c;优雅 每次点击&#xff0c;我们都会让网络编辑变得更简单、更强大、更愉快 安全、快速、智能和稳健。 Froala Editor 是一个 用 JavaScript 编写 的轻量级 WYSIWYG HTML 编辑器&#xff0…

【计算机毕业设计】小型OA系统设计与实现Springboot

一、系统截图&#xff08;需要演示视频可以私聊&#xff09; 摘 要 在Internet高速发展的今天&#xff0c;我们生活的各个领域都涉及到计算机的应用&#xff0c;其中包括小型OA系统设计与实现的网络应用&#xff0c;在国外小型OA系统设计与实现已经是很普遍的方式&#xff0c;不…

G1D17-研究方向rce45-49不快乐就去敲敲代码

现在每天晚上都觉得一天结束的好快呀~每天早上都很幸福&#xff0c;因为还有一天的时间呐&#xff01;&#xff01;&#xff01; 今天主要的事情是完成老师的作业——论文主题阅读的report&#xff0c;看一下动态规划&#xff08;emm最近喜欢啃这种让人掉头发的问题~&#xff0…

JADE: Adaptive Differential Evolution withOptional External Archive

0、论文背景 本文在DE的基础上&#xff0c;提出了一种新的差分进化(DE)算法JADE&#xff0c;通过实现一种新的突变策略DE/current-to-pbest&#xff0c;采用可选的外部存档和参数的自适应更新&#xff0c;来提高优化性能。上述两种操作使种群多样化&#xff0c;并提高了收敛性…

Mybatis源码解析(六):缓存执行器操作流程

Mybatis源码系列文章 手写源码&#xff08;了解源码整体流程及重要组件&#xff09; Mybatis源码解析(一)&#xff1a;环境搭建 Mybatis源码解析(二)&#xff1a;全局配置文件的解析 Mybatis源码解析(三)&#xff1a;映射配置文件的解析 Mybatis源码解析(四)&#xff1a;s…

【附源码】Python计算机毕业设计图书共享系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

Bootstrap(三)

目录&#xff1a; &#xff08;1&#xff09;bootstrap响应式工具 &#xff08;2&#xff09;bootstrap实例导航 &#xff08;1&#xff09;bootstrap响应式工具 class加属性&#xff1a; visible-xs&#xff1a;隐藏显示&#xff0c;当屏幕宽度小于等于xs的时候显示、 vis…

如何使用轻量应用服务器搭建Typecho个人博客系统?

之前有写过WordPress搭建博客的教程&#xff1a;如何使用轻量应用服务器搭建WordPress个人博客 有的小伙伴感觉WordPress比较臃肿&#xff0c;有没有比较简洁的博客系统呢&#xff0c;今天就把Typecho搭建个人博客的操作方法分享给大家&#xff0c;需要的小伙伴可以参考以下。 …

注解的使用

1. 注解概述 1.1 注解概述、作用 Java 注解&#xff08;Annotation&#xff09;又称 Java 标注&#xff0c;是 JDK5.0 引入的一种注释机制。Java 语言中的类、构造器、方法、成员变量、参数等都可以被注解进行标注。 1.2 注解的作用是什么 2. 自定义注解 2.1 自定义注解 —…