kubenetes学习 1

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: kubenetes学习

kubernetes介绍

应用部署方式演变

在部署应用程序的方式上经历的三个时代

传统部署

优点:简单,不需要其他技术的参与
缺点:不能为应用程序定义资源使用的边界,很难合理发分配计算机资源,程序之间容易产生影响
如果一个应用程序占用资源突然增高会影响其他资源

image.png

Hardware:计算机硬件

Operating System: 操作系统

App:运行的应用程序

虚拟化部署:可以在一台物理机上运行多个虚拟机,每个虚拟机都是独立的环境

Hardware:计算机硬件


优点:程序之间不会相互产生影响,提供了一定程序的安全性
缺点:增加了操作系统,浪费了部分的资源Operating System: 操作系统

image.png

Hypervisor虚拟机监视器

Virtual Machine虚拟机

Bin/Library:类,库

App:运行的应用程序

容器化部署:与虚拟机类似,但是共享了操作系统(共用了底层的操作系统)

kubernetes简介

优点:可以保证每个容器都有自己的文件系统,CPU,内存,进程等
运行应用程序所需要的资源都被容器包装,并和底层基础架构解耦
(使用容器 启动应用程序的资源都不是有操作系统直接分配的,都是由容器来提供的)
容器化的应用程序可以跨云服务商,跨linux操作系统版本进行部署kubernetes官网:https://kubernetes.io/

image.png

image.png

kubernetes官方文档:https://kubernetes.io/zh-cn/docs/concepts/overview/

kubernetes是一个全新的基于容器的分布式架构领先方案,是谷歌Borg系统的一个开源版本,20149

月发布的第一个版本,20157月份发布的第一个正式版

==kubernetes的本质是一组服务器集群,==它可以在每一个集群节点上运行特定的程序,来对节点中的

容器进行管理,它的目的就是实现资源管理的自动化

它主要实现以下功能:

自我修复

当容器启动失败时会对重启进行重启

当一个容器出现问题的时候会重新启用一个容器来代替它的工作

当容器未通过监控检查时,会关闭此容器直到容器正常运行时,才会对外提供服务

弹性伸缩

可以根据需求,自动对集群中正在运行的容器进行调整

服务发现

服务可以通过自动发现的形式找到它所依赖的服务

负载均衡

如果一个服务启动了多个容器,能够自动实现请求的负载均衡

版本回退

如果发现新版本服务有问题,可以退回到原来的版本

存储编排

可以根据容器的编排自己创建存储卷

kubernetes组件

一个kubetnetes集群是由控制节点(master)工作节点(node )构成

master:集群的控制平面,负责集群的决策(管理)

apiserver:资源操作的唯一入口,接收用户输入的命令,提供认证,授权,api注册和发现等机制(所以对
集群的管理操作都是从这个入口进来的)
scheduler:负责集群资源的调度,按照预定的调度策略将Pod调度刀相应的node节点上(按照一定的算法将
应用部署的请求算一分给谁)
controller-manager :负责维护集群的状态,比如程序部署安排,故障检测,自动扩展,滚动更新等
etcd:负责存储集群中各种资源对象的信息(用于保存集群中相关的信息

node:集群的数据平面,负责为容器提供运行环境 (工作)

kubelet:负责维护容器的生命周期,即通过控制docker,来创建,更新,销毁容器
kubeProxy:负责提供集群内部服务发现和负载均衡
docker:负责节点上容器的各种操作


1. 一旦kubernetes环境启动后,masternode都会将自身的信息存储刀etcd数据库中

2. 安装服务的请求首先发送到master节点的apiserver组件

3. apiserver组件会调用scheduler来决定应该把服务部署到哪一个node节点上面,在此时它会读取

etcd中存储各个node节点的信息,然后按照一定的算法进行选择并将结果告知apiserver

4. apiserver会调用controller-manager去调度node节点安装服务

5. kubelet接收到指令手,会通知docker,然后由docker来启动这个服务器的pod pod

kubernetes的最小操作单元,容器必须在pod

6. 服务运行以后,如果需要访问访问,就需要通过kube-proxy产生访问的代理这样外界用户就可以访

问集群中的服务了

kubernetes概念

Master:集群控制节点,每个集群需要至少一个master节点来负责集群的管控(安排工作的)

Node:工作负载节点,master分配容器给node工作节点上 node节点上的docker负载运行(真正干活

的)

Pod:容器都是运行在pod中一个pod可以运行一个或多个容器

Controller:控制器,通过它来实现pod的管理 比如启动pod 停止pod 伸缩pod数量等等

servicepod对外服务的统一入口 下面可以维护同一个类的多个pod

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

namespace:命名空间,用来隔离pod的运行环境

kubernetes环境部署

环境准备 centos7.9镜像 虚拟机三台

image.png

1.主机名解析

(三台虚拟机都需要执行)

把以下内容添加到/etc/hosts文件中
192.168.30.136 master
192.168.30.135 node
192.168.30.134 node1
[root@master ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.30.136 master
192.168.30.135 node
192.168.30.134 node1
#添加你完成ping一下主机名试试
[root@master ~]# ping node -c3
PING node (192.168.30.135) 56(84) bytes of data.
64 bytes from node (192.168.30.135): icmp_seq=1 ttl=64 time=0.539 ms
64 bytes from node (192.168.30.135): icmp_seq=2 ttl=64 time=0.276 ms
64 bytes from node (192.168.30.135): icmp_seq=3 ttl=64 time=0.328 ms
--- node ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 0.276/0.381/0.539/0.113 ms

2.时间同步

(三台虚拟机都需要执行)

kubernetes要求集群中的节点时间必须精确一致

使用chronyd服务从网络同步时间

启动chronyd并设置开机自启
[root@master ~]# systemctl enable chronyd --now

3.禁用iptablesfirewalld

(三台虚拟机都需要执行)

kubernetesdocker在运行中会产生大量的iptables规则,为了不让系统规则跟它们混淆,直接关闭系

统的规则

#1.关闭firewalld服务并关闭开机自启
[root@master ~]# systemctl stop firewalld
[root@master ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.

4.禁用selinux

(三台虚拟机都需要)

#编辑/etc/selinux/config文件 把SELINUX=后面的值改为disabled
[root@master ~]# cat /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are
protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted

.5.禁用swap分区

(三台虚拟机都需要执行)

swap分区值的是虚拟内存分区,它的作用是在我们的物理内存使用完了之后,将磁盘空间虚拟成内存来

使用

启动swap设备会对系统的性能产生非常负面的影响

#编辑/etc/fstab禁用掉swap分区那一行
[root@master ~]# vim /etc/fstab
[root@master ~]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Tue Nov 8 21:15:26 2022
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root / xfs defaults 0 0
UUID=c6ffacd9-9061-4228-aa24-892d398154a6 /boot xfs
defaults 0 0
#/dev/mapper/centos-swap swap swap defaults 0 0

5.修改linux内核参数

(三台虚拟机都需要执行)

# 修改linux的内核参数,添加网桥过滤和地址转发功能
# 编辑/etc/sysctl.d/kubernetes.conf文件添加以下内容
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
#重新加载配置
[root@master ~]# sysctl -p
#加载网桥过滤模块
[root@master sysctl.d]# modprobe br_netfilter
#查看网桥模块是否加载成功
[root@master sysctl.d]# lsmod | grep br_netfilter
br_netfilter 22256 0
bridge 151336 1 br_netfilter
#重启系统
[root@master sysctl.d]# reboot

6.安装docker

(三台虚拟机都需要执行)

#更换镜像源
#下载源文件
[root@master ~]# wget -O /etc/yum.repos.d/docker-ce.repo
https://repo.huaweicloud.com/docker-ce/linux/centos/docker-ce.repo
--2022-11-09 08:43:20-- https://repo.huaweicloud.com/docker￾ce/linux/centos/docker-ce.repo
正在解析主机 repo.huaweicloud.com (repo.huaweicloud.com)... 223.242.32.25,
223.242.32.21, 223.242.32.24, ...
正在连接 repo.huaweicloud.com (repo.huaweicloud.com)|223.242.32.25|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:1919 (1.9K) [application/octet-stream]
正在保存至: “/etc/yum.repos.d/docker-ce.repo”
100%
[================================================================================
=================================================================================
===================================================================>] 1,919
--.-K/s 用时 0s
2022-11-09 08:43:20 (1020 MB/s) - 已保存 “/etc/yum.repos.d/docker-ce.repo”
[1919/1919])
#软件仓库地址替换
[root@master ~]# sudo sed -i 's+download.docker.com+repo.huaweicloud.com/docker￾ce+' /etc/yum.repos.d/docker-ce.repo
#更新索引文件
[root@master ~]# yum makecache fast
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.ustc.edu.cn
* extras: mirrors.ustc.edu.cn
* updates: mirrors.ustc.edu.cn
base
| 3.6 kB 00:00:00
docker-ce-stable
| 3.5 kB 00:00:00
extras
| 2.9 kB 00:00:00
updates
| 2.9 kB 00:00:00
(1/2): docker-ce-stable/7/x86_64/updateinfo
| 55 B 00:00:00
(2/2): docker-ce-stable/7/x86_64/primary_db
| 87 kB 00:00:00
元数据缓存已建立
#查看源中支持的docker版本
[root@master ~]# yum list docker-ce --showduplicates
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.ustc.edu.cn
* extras: mirrors.ustc.edu.cn
* updates: mirrors.ustc.edu.cn
可安装的软件包
docker-ce.x86_64 17.03.0.ce-1.el7.centos
docker-ce-stable
docker-ce.x86_64 17.03.1.ce-1.el7.centos
docker-ce-stable
docker-ce.x86_64 17.03.2.ce-1.el7.centos
docker-ce-stable
docker-ce.x86_64 17.03.3.ce-1.el7
docker-ce-stable
docker-ce.x86_64 17.06.0.ce-1.el7.centos
docker-ce-stable
docker-ce.x86_64 17.06.1.ce-1.el7.centos
docker-ce-stable
docker-ce.x86_64 17.06.2.ce-1.el7.centos
docker-ce-stable
docker-ce.x86_64 17.09.0.ce-1.el7.centos
docker-ce-stable
docker-ce.x86_64 17.09.1.ce-1.el7.centos
docker-ce-stable
docker-ce.x86_64 17.12.0.ce-1.el7.centos
docker-ce-stable
docker-ce.x86_64 17.12.1.ce-1.el7.centos
docker-ce-stable
docker-ce.x86_64 18.03.0.ce-1.el7.centos
docker-ce-stable
docker-ce.x86_64 18.03.1.ce-1.el7.centos
docker-ce-stable
docker-ce.x86_64 18.06.0.ce-3.el7
docker-ce-stable
docker-ce.x86_64 18.06.1.ce-3.el7
docker-ce-stable
docker-ce.x86_64 18.06.2.ce-3.el7
docker-ce-stable
docker-ce.x86_64 18.06.3.ce-3.el7
docker-ce-stable
docker-ce.x86_64 3:18.09.0-3.el7
docker-ce-stable
docker-ce.x86_64 3:18.09.1-3.el7
docker-ce-stable
docker-ce.x86_64 3:18.09.2-3.el7
docker-ce-stable
docker-ce.x86_64 3:18.09.3-3.el7
docker-ce-stable
docker-ce.x86_64 3:18.09.4-3.el7
docker-ce-stable
docker-ce.x86_64 3:18.09.5-3.el7
docker-ce-stable
docker-ce.x86_64 3:18.09.6-3.el7
docker-ce-stable
docker-ce.x86_64 3:18.09.7-3.el7
docker-ce-stable
docker-ce.x86_64 3:18.09.8-3.el7
docker-ce-stable
docker-ce.x86_64 3:18.09.9-3.el7
docker-ce-stable
docker-ce.x86_64 3:19.03.0-3.el7
docker-ce-stable
docker-ce.x86_64 3:19.03.1-3.el7
docker-ce-stable
docker-ce.x86_64 3:19.03.2-3.el7
docker-ce-stable
docker-ce.x86_64 3:19.03.3-3.el7
docker-ce-stable
docker-ce.x86_64 3:19.03.4-3.el7
docker-ce-stable
docker-ce.x86_64 3:19.03.5-3.el7
docker-ce-stable
docker-ce.x86_64 3:19.03.6-3.el7
docker-ce-stable
docker-ce.x86_64 3:19.03.7-3.el7
docker-ce-stable
docker-ce.x86_64 3:19.03.8-3.el7
docker-ce-stable
docker-ce.x86_64 3:19.03.9-3.el7
docker-ce-stable
docker-ce.x86_64 3:19.03.10-3.el7
docker-ce-stable
docker-ce.x86_64 3:19.03.11-3.el7
docker-ce-stable
docker-ce.x86_64 3:19.03.12-3.el7
docker-ce-stable
docker-ce.x86_64 3:19.03.13-3.el7
docker-ce-stable
docker-ce.x86_64 3:19.03.14-3.el7
docker-ce-stable
docker-ce.x86_64 3:19.03.15-3.el7
docker-ce-stable
docker-ce.x86_64 3:20.10.0-3.el7
docker-ce-stable
docker-ce.x86_64 3:20.10.1-3.el7
docker-ce-stable
docker-ce.x86_64 3:20.10.2-3.el7
docker-ce-stable
docker-ce.x86_64 3:20.10.3-3.el7
docker-ce-stable
docker-ce.x86_64 3:20.10.4-3.el7
docker-ce-stable
docker-ce.x86_64 3:20.10.5-3.el7
docker-ce-stable
docker-ce.x86_64 3:20.10.6-3.el7
docker-ce-stable
docker-ce.x86_64 3:20.10.7-3.el7
docker-ce-stable
docker-ce.x86_64 3:20.10.8-3.el7
docker-ce-stable
docker-ce.x86_64 3:20.10.9-3.el7
docker-ce-stable
docker-ce.x86_64 3:20.10.10-3.el7
docker-ce-stable
docker-ce.x86_64 3:20.10.11-3.el7
docker-ce-stable
docker-ce.x86_64 3:20.10.12-3.el7
docker-ce-stable
docker-ce.x86_64 3:20.10.13-3.el7
docker-ce-stable
docker-ce.x86_64 3:20.10.14-3.el7
docker-ce-stable
docker-ce.x86_64 3:20.10.15-3.el7
docker-ce-stable
docker-ce.x86_64 3:20.10.16-3.el7
docker-ce-stable
docker-ce.x86_64 3:20.10.17-3.el7
docker-ce-stable
docker-ce.x86_64 3:20.10.18-3.el7
docker-ce-stable
docker-ce.x86_64 3:20.10.19-3.el7
docker-ce-stable
docker-ce.x86_64 3:20.10.20-3.el7
docker-ce-stable
docker-ce.x86_64 3:20.10.21-3.el7
docker-ce-stable
#安装指定版本docker-ce docker-ce-cli
[root@master ~]# yum install -y docker-ce-19.03.11 docker-ce-cli-19.03.11
#修改配置文件 docker在默认的情况下使用Cgroup Driver为cgroupfs而kubernetes推荐使用systemd
来代替cgroupfs
[root@master ~]# mkdir /etc/docker
[root@master ~]# cat <<EOF > /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": ["https://dalmipwp.mirror.aliyuncs.com"]
}
EOF
#启动docker查看docker版本
[root@master ~]# systemctl enable docker --now
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service
to /usr/lib/systemd/system/docker.service.
[root@master ~]# docker --version
Docker version 19.03.11, build 42e35e61f3
[root@master ~]# docker version
Client: Docker Engine - Community
Version: 19.03.11
API version: 1.40
Go version: go1.13.10
Git commit: 42e35e61f3
Built: Mon Jun 1 09:13:48 2020
OS/Arch: linux/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 19.03.11
API version: 1.40 (minimum version 1.12)
Go version: go1.13.10
Git commit: 42e35e61f3
Built: Mon Jun 1 09:12:26 2020
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.6.9
GitCommit: 1c90a442489720eec95342e1789ee8a5e1b9536f
runc:
Version: 1.1.4
GitCommit: v1.1.4-0-g5fd4c4d
docker-init:
Version: 0.18.0
GitCommit: fec3683
相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
存储 Kubernetes 安全
Kubernetes必备知识: PersistentVolumeClaim
PersistentVolumeClaim(简称PVC)是用户存储的请求,PVC消耗PV的资源,可以请求特定的大小和访问模式,需要指定归属于某个Namespace,在同一个Namespace的Pod才可以指定对应的PVC。 当需要不同性质的PV来满足存储需求时,可以使用StorageClass来实现。 每个 PVC 中都包含一个 spec 规格字段和一个 status 声明状态字段。
3578 0
Kubernetes必备知识: PersistentVolumeClaim
|
2月前
|
Prometheus 监控 Kubernetes
一篇文章讲明白Kubernetes(k8s)部署Promehteus监控
一篇文章讲明白Kubernetes(k8s)部署Promehteus监控
51 0
|
3月前
|
Kubernetes 应用服务中间件 nginx
Kubernetes服务网络Ingress网络模型分析、安装和高级用法
Kubernetes服务网络Ingress网络模型分析、安装和高级用法
93 5
|
3月前
|
存储 Kubernetes 安全
Kubernetes Pod配置:从基础到高级实战技巧
Kubernetes Pod配置:从基础到高级实战技巧
243 0
|
9月前
|
存储 Kubernetes 应用服务中间件
使用CoreOS来部署一个Kubernetes集群,包括必要的步骤和关键概念
使用kubeadm join命令将其他CoreOS节点加入Kubernetes集群。在每个节点上运行以下命令,其中<控制平面节点IP>是Kubernetes控制平面节点的IP地址,<令牌>是在初始化控制平面时生成的令牌。
160 0
|
12月前
|
Kubernetes 容器
kubenetes学习 2
kubenetes学习
|
12月前
|
Kubernetes 容器 Perl
kubenetes学习 4
kubenetes学习
|
设计模式 Kubernetes Cloud Native
【探索 Kubernetes|作业管理篇 系列 7】探究 Pod 有什么用,为什么需要它
【探索 Kubernetes|作业管理篇 系列 7】探究 Pod 有什么用,为什么需要它
77 1
|
Kubernetes 网络协议 Linux
【2023】Kubernetes-网络原理
【2023】Kubernetes-网络原理
107 0