曹县住房和城乡建设局网站,在线设计平台属于什么行业,微信里的小程序游戏,玛伊网站做兼职加入要多少钱一、kubernetes
1、简介
kubernetes#xff0c;简称K8s#xff08;库伯内特#xff09;#xff0c;是用8代替名字中间的8个字符“ubernete”而成的缩写
云计算的三种主要服务模式——基础设施即服务#xff08;IaaS#xff09;、平台即服务#xff08;PaaS#xff0…一、kubernetes
1、简介
kubernetes简称K8s库伯内特是用8代替名字中间的8个字符“ubernete”而成的缩写
云计算的三种主要服务模式——基础设施即服务IaaS、平台即服务PaaS和软件即服务SaaS
Kubernetes是一个应用于大规模部署你分布式应用的平台它管理着一系列的主机或服务器Node节点节点中最小单元Pod
Kubernetes 是一个可移植的、可扩展的开源平台用于管理容器化的工作负载和服务可促进声明式配置和自动化。Kubernetes 拥有一个庞大且快速增长的生态系统。Kubernetes 的服务、支持和工具广泛可用。Kubernetes 这个名字源于希腊语意为“舵手”或“飞行员”。k8s 这个缩写是因为 k 和 s 之间有八个字符的关系。 Google 在 2014 年开源了 Kubernetes 项目。Kubernetes 建立在Google 在大规模运行生产工作负载方面拥有十几年的经验的基础上结合了社区中最好的想法和实践
官网地址https://kubernetes.io/
为什么使用K8s 容器是打包和运行应用程序的最佳方式在生产环境中我们需要管理运行应用程序的容器并且确保这些容器不会停机。如果一个容器发生了故障则需要手动启动另一个容器太麻烦了如果有一个系统能够帮助我们处理这些行为是不是会很方便 Kubernetes 就能解决上面提出的一系列的问题。Kubernetes 为我们提供了一个可弹性运行的分布式系统的框架Kubernetes 可以满足我们的扩展要求、故障转移、部署模式等如Kubernetes 可以轻松管理系统的 Canary金丝雀 部署。 Kubernetes 为我们提供下面的功能 ①服务发现和负载均衡Kubernetes 可以使用 DNS 名称或自己的 IP 地址公开容器如果进入容器的流量很大Kubernetes 可以负载均衡并分配网络流量从而使得部署稳定。 ②存储编排Kubernetes 允许我们自动挂载自己选择的存储系统如本地存储、公有云提供商等。 ③自动部署和回滚我们可以使用 Kubernetes 描述已部署容器的所需状态Kubernetes 可以以受控的速率将实际状态更改为期望状态如我们可以自动化 Kubernetes 来为我们的部署创建新的容器删除现有容器并将它们的所有资源用于新的容器。 ④自动完成装箱计算Kubernetes 允许我们指定每个容器所需要的 CPU 和内存RAM。当容器指定了资源请求时Kubernetes 可以做出更好的决策来管理容器的资源。 ⑤自我修复Kubernetes 重新启动失败的容器、替换容器、杀死不响应用户定义的运行状况检查的容器并且在准备好服务之前不将其通告给客户端。 ⑥密钥和配置管理Kubernetes 允许我们存储和管理敏感信息如密码、OAuth2 令牌和 SSH 密钥。我们可以在不重建容器镜像的情况下部署和更新密钥和应用程序配置也无需再堆栈配置中暴露密钥。
2、Kubernetes的特点
1、自我修复在节点故障时重新启动失败的容器替换和重新部署保证预期的副本数量杀死健康检查失败的容器并且在未准备好之前不会处理客户端的请求确保线上服务不中断。2、弹性收缩使用命令、UI 或者基于 CPU 使用情况自动快速扩容和缩容应用程序实例保证应用业务高峰并发时的高可用性业务低峰时回收资源以最小成本运行服务。3、自动部署和回滚采用滚动更新策略更新应用一次更新一个 Pod而不是同时删除所有 Pod如果更新过程中出现问题将回滚更改确保升级升级过程中不影响业务运行4、服务发现和负载均衡能够为多个容器提供统一访问入库内部 IP 地址和一个 DNS 名称并且负载均衡关联所有容器使用户无需考虑容器 IP 的问题5、存储编排能够挂载外部存储系统无论是来自本地存储公有云如AWS还是网络存储如NFS、ClusterFS、Ceph都可以作为集群资源的一部分使用极大提供存储使用的灵活3、K8S集群原理 Master 节点Control Plane【控制面板】Master 节点控制整个集群。 Controller Manager控制管理器。etcd键值数据库类似于 Redis。scheduler调度器。api-serverapi网关所有的控制都需要通过api-server。 Node 节点worker工作节点 kubelet监工每一个 Node 节点上必须安装的组件负责交互 master 的 api-server 以及当前机器的应用启停等在 master 机器就是 master 的小助手。每一台机器真正干活的都是这个 Kubelet 。kube-proxy代理网络。 Pod docker run 启动的是一个 container容器容器是 Docker 的基本单位一个应用就是一个容器。kubectl run 启动的是一个应用称为一个 Pod Pod 是 Kubernetes 的基本单位。 Pod 是对容器的再一次封装。Pod 类似于 Java 日志体系中的 Slf4j 而 Docker 中的容器类似于 Java 日志体系中的 Logback 等日志实现。一个容器往往代表不了一个基本应用如博客系统WordPressPHP MySQL但是一个 Pod 可以包含多个 Container一个 Pod 可以代表一个基本的应用。
4、主控节点 / Master 组件
kubectl: 命令行工具
Dashboard: 可视化界面
api-server: 接口服务给予REST风格开放K8S接口的服务集群统一入口各组件的协调者提供认证、授权、访问控制、API注册和发现等机制以 RESTful API 的方式提供接口服务所有对象资源的增删改查和监听都由 API Server 处理后提交给 Etcd 存储。
controller-manager控制器管理器负责各个类型的控制器针对k8S 中的各种资源进行管理控制器管理程序负责控制器的管理控制器和资源一一对应控制器用于维护集群的状态如故障检测、自动扩展、滚动更新等常规后台任务。
cloud-controller-manager: 云控制器管理器第三方云平台提供控制API对接管理功能
kube-scheduler: 调度程序负责资源的调度按照预定的调度策略将 Pod 调度到相应的机器上调度程序根据调度算法为新创建的 Pod 选择一个 Node 节点可以任意部署可以部署在同一个节点上也可以部署在不同的节点上Etcd Cluster分布式键值存储系统集群用于保存集群状态数据如Pod、Service 等资源对象信息。5、工作节点 / Node 组件
1Kubelet:主控节点代理程序在 Node 节点上执行 Master 节点安排的任务它将每个 Pod 转换成一组容器用于管理本节点运行容器的生命周期如创建容器、Pod 挂载数据卷、下载 Secret 、获取容器和节点状态等工作。2Kube-Proxy:网络代理程序在 Node 节点上实现 Pod 网络代理负责为 Service 提供 Cluster 内部的服务发现、网络规划和负载均衡。3container-runtime: Docker容器引擎负责所有具体的映像下载和容器运行、containerd、CRI-O4Pod: 容器1 容器2 7、第三方插件
1Flannel Finnal 是一个为 K8s 原生集成的三层网络解决方案主要用于解决容器之间的网络CNI 网络通信问题Flannel 为每个 Node 工作节点分配独立的子网网段并将所有的网络信息存储在 Etcd 数据库中。脱离 CNI 网络的 K8s 集群是无法工作的因此在部署 K8s 集群时必须部署 Flannel 插件。2CoreDN SCoreDNS 是一个为 K8s 原生集成的域名发现解决方案主要用于将 K8s 服务的动态 IP 地址自动映射成为 service-name:service-namespace 规则的 DNS 域名。因 K8s 在创建服务时会分配动态的 IP 地址因此当在【B 容器 】中使用【A 容器】发布的服务因为【A 容器】的服务对应的 IP 是动态可变的所以应当通过该服务对应的 DNS 获取例如htp(s)://:。3Dashboard Dashboard 是一个为 K8s 原生集成的用户界面主要用于 K8s 的可视化管理。使用 Dashboard 可以监控、管理 K8s 集群和集群中的各类资源如 DeploymentJobDaemonSet 等等还可以完成对 Deployment 实现弹性伸缩、发起滚动升级、重启 Pod 或者使用向导创建新应用等管理行为。4Ingress-Nginx Ingress-Nginx 是一个为 K8s 原生集成的服务网关主要用于对集群中的服务通常是 Http 或 Https 服务的外部访问的 API 对象以及提供负载平衡、SSL 终端和基于名称的虚拟主机8、应用场景
K8s 主要应用于云架构和云原生的部署场景。
“云” 是使用容器构建的一套服务集群网络它由很多的容器构成
“K8s” 则是用来管理云中的容器平台工具
1、云架构
PaaS平台即服务 运营商提供 MySQL 、Redis、MQ、Elasticsearch 等数据库或中间件等服务用户租用购买或分配权限后直接使用。
SaaS软件即服务运营商提供应用系统的部署和发布等服务用户租用购买或分配权限后直接使用2、云原生
为了让应用程序项目服务软件都运行在云上的解决方案这样方案叫做云原生有以下特点容器化所有的服务都必须部署在容器中微服务Web 服务架构是微服务架构CI/CD可持续交互和可持续部署DevOps开发和运维密不可分二、K8s环境安装
一、前期准备
K8s-master01 k8s-node1 k8s-node02
kubernetes 版本 1.23.6
Docker版本20
k8s: 1.23.6
docker官网版本20.10.0 https://docs.docker.com/engine/release-notes/20.10/
清华云docker下载离线版本https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/static/stable/x86_64/ 官方推荐的Docker版本 根据Kubernetes官方文档和相关可靠资源以下是一些常见Kubernetes版本推荐的Docker版本 Kubernetes 1.13 到 1.19推荐使用Docker 1.13.1 到 19.03.x版本。Kubernetes 1.20推荐使用Docker 1.13.1 到 19.03.x版本但Kubernetes官方开始逐步废弃对Docker作为容器运行时的直接支持。Kubernetes 1.21 到 1.22推荐使用Docker 1.19.3 到 20.10.x版本。Kubernetes 1.23及以上版本建议使用符合容器运行时接口CRI的运行时如containerd或CRI-O不再支持Docker作为容器运行时。 2.注意事项 从Kubernetes 1.20开始Kubernetes官方逐步废弃了对Docker作为容器运行时的直接支持。对于Kubernetes 1.23及更高版本kubeadm默认使用containerd作为容器运行时不再支持Docker。 如果你的集群仍在使用Docker作为容器运行时建议尽快迁移到CRI兼容的运行时以确保与Kubernetes的兼容性。 K8S-master01:
centos7、2CPU、4G 内存、40G存储空间将虚拟机磁盘存储为单个文件、NAT模式、带GUI服务器安装、打开网卡
K8S-node01:
centos7、2G 内存、40G存储空间将虚拟机磁盘存储为单个文件、NAT模式、带GUI服务器安装、打开网卡
K8S-node02:
centos7、2G 内存、40G存储空间将虚拟机磁盘存储为单个文件、NAT模式、带GUI服务器安装、打开网卡
最终目标
在所有节点上安装Docker 和kubeadm
部署Kubernetes Master
部署容器网络插件
部署Kubernetes Node将节点加入Kubernetes 集群中
部署Dashboard Web 页面可视化查看Kubernetes 资源二、虚拟机安装完毕进入linux操作系统-所有的节点及master配置
现在centos7不支持更新了换yum源,更新阿里云yum源
[rootlocalhost ~]# rm -rf /etc/yum.repos.d/*
[rootlocalhost ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[rootlocalhost ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
[rootlocalhost ~]# wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[rootlocalhost ~]# yum repolist -v1、最小安装没有ifconfig命令 yum search ifconfig提示包名为 net-tools.x86_64使用yum安装 yum -y install net-tools.x86_64没有vim命令: yum -y install vim*
2、关闭防火墙[rootlocalhost ~]# systemctl stop firewalld[rootlocalhost ~]# systemctl disable firewalld3、关闭SELINUX[rootk8smaster ~]# vi /etc/selinux/configSELINUXdisabled4、关闭swap
[rootk8smaster ~]# swapoff -a
[rootk8smaster ~]# vim /etc/fstab 关闭swap那行 ##/dev/mapper/centos-swap swap swap分区指的是虚拟内存分区它的作用是在物理内存使用完之后将磁盘空间虚拟成内存来使用启用swap设备会对系统的性能产生非常负面的影响因此kubernetes要求每个节点都要禁用swap设备但是如果因为某些原因确实不能关闭swap分区就需要在集群安装过程中通过明确的参数进行配置说明 5、设置主机名
[rootk8s-master ~]# hostnamectl set-hostname k8s-master
[rootk8s-node01 ~]# hostnamectl set-hostname k8s-node01[rootk8smaster ~]# vim /etc/hosts192.168.110.140 k8s-master192.168.110.141 k8s-node016、将桥接的IPv4流量传递到iptables的链
[rootk8smaster ~]# vim /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables 1
net.bridge.bridge-nf-call-iptables 1
net.ipv4.ip_forward 1
[rootk8smaster ~]# sysctl --system #生效7、设置时间同步
[rootk8smaster ~]# yum -y install ntpdate
[rootk8smaster ~]# ntpdate time.windows.com #测试命令
22 Jun 18:56:53 ntpdate[8157]: adjust time server 20.189.79.72 offset -0.006902 sec 2、安装Docker
[rootk8s-master ~]#yum -y install docker-ce-20.10.16 docker-ce-cli-20.10.16 containerd.io
[rootk8s-node01 ~]#yum -y install docker-ce-20.10.16 docker-ce-cli-20.10.16 containerd.io
#启动服务及设置开机自启
[rootk8s-master ~]# systemctl start docker containerd
[rootk8s-master ~]# systemctl enable docker containerd添加镜像加速器
cat /etc/docker/daemon.json EOF
{dns: [8.8.8.8, 8.8.4.4],insecure-registries:[192.168.200.15],registry-mirrors: [https://docker.1ms.run,https://hub.mirrorify.net,https://docker.m.daocloud.io,https://dockerproxy.com,https://docker.mirrors.ustc.edu.cn,https://docker.nju.edu.cn,https://registry.docker-cn.com,https://docker.mirrors.ustc.edu.cn,https://hub-mirror.c.163.com,https://mirror.baidubce.com]
}
EOF[rootk8s-master ~]# systemctl daemon-reload
[rootk8s-master ~]# systemctl restart docker containerd3、安装k8s-配置repo文件
[rootk8s-master ~]# vim /etc/yum.repos.d/k8s.repo
[kubernetes]
nameKubernetes
baseurlhttps://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled1
gpgcheck0
repo_gpgcheck0
gpgkeyhttps://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg4、安装kubeadm kubele 和 kubectl
注意 master 和node节点都装
[rootk8s-master ~]#yum install -y kubelet-1.23.6 kubeadm-1.23.6 kubectl-1.23.6
[rootk8s-node01 ~]#yum install -y kubelet-1.23.6 kubeadm-1.23.6 kubectl-1.23.6
#启动服务
[rootk8s-master ~]# systemctl start kubelet
[rootk8s-master ~]# systemctl enable kubelet5、修改containerd源
# 生成 containerd 的默认配置文件
[rootk8s-master ~]# containerd config default /etc/containerd/config.toml
[rootk8s-master ~]# vim /etc/containerd/config.tomlsandbox_image registry.k8s.io/pause:3.6#修改为sandbox_image registry.aliyuncs.com/google_containers/pause:3.6[rootk8s-master ~]# systemctl daemon-reload
[rootk8s-master ~]# systemctl restart docker containerd6、master配置初始化
kubeadm init --apiserver-advertise-address192.168.110.140 --image-repositoryregistry.aliyuncs.com/google_containers --kubernetes-versionv1.23.6 --service-cidr10.96.0.0/16 --pod-network-cidr10.244.0.0/16#参数说明
-–apiserver-advertise-address通告侦听地址
–-image-repository指定镜像地址使用阿里云的默认会使用谷歌镜像
–-kubernetes-version指定当前的kubernetes的版本
–-pod-network-cidr10.244.0.0/16flannel网络的固定地址范围[rootk8s-master ~]# kubeadm reset 重置常见的错误1 解决办法加速器配置文件
[rootk8s-master ~]# vim /etc/docker/daemon.json
exec-opts: [native.cgroupdriversystemd]
[rootk8s-node01 ~]# systemctl daemon-reload
[rootk8s-node01 ~]# systemctl restart docker解决错误之后重置了初始化命令
[rootk8s-master ~]# kubeadm reset 重置继续执行如下命令
kubeadm init --apiserver-advertise-address192.168.110.140 --image-repositoryregistry.aliyuncs.com/google_containers --kubernetes-versionv1.23.6 --service-cidr10.96.0.0/16 --pod-network-cidr10.244.0.0/16如何执行正常的界面如下
pod节点需要加入时执行提示命令
kubeadm join 192.168.110.140:6443 --token 1hft5e.vb1xncstdogsk4ay \--discovery-token-ca-cert-hash sha256:a5d9376d48397caf6ed1f9daf59d51a41cfe012d0e85b15e5eb158c312cba49a7、使用kubectl工具
[rootk8s-master ~]# mkdir -p $HOME/.kube
[rootk8s-master ~]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[rootk8s-master ~]# chown $(id -u):$(id -g) $HOME/.kube/config
[rootk8s-master ~]# export KUBECONFIG/etc/kubernetes/admin.conf
[rootk8s-master ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
k8s-master NotReady control-plane,master 31m v1.23.68、node节点加入kubernetes
[rootk8s-node01 ~]# kubeadm join 192.168.110.140:6443 --token 1hft5e.vb1xncstdogsk4ay \--discovery-token-ca-cert-hash sha256:a5d9376d48397caf6ed1f9daf59d51a41cfe012d0e85b15e5eb158c312cba49a常见错误2端口被占用了 [rootk8s-node01 ~]# kubeadm reset #重置根据提示输入y9、网络插件的安装
CNIContainer Network Interface是 Kubernetes 集群的网络模型用于定义容器与容器之间的通信方式。在部署 CNI 网络组件之前需要选择合适的 CNI 插件例如 Calico、Flannel 等。 在部署 CNI 插件之前需要安装相应的依赖软件例如 Docker、etcd 等。然后根据所选的 CNI 插件的文档进行相应的配置和安装。一旦 CNI 插件安装完成Kubernetes 集群中的节点将自动加入到网络中并能够与其他节点进行通信
9.1部署Calico插件
[rootk8s-master ~]# mkdir /opt/k8s
[rootk8s-master ~]# cd /opt/k8s
[rootk8s-master k8s]# wget https://calico-v3-25.netlify.app/archive/v3.25/manifests/calico.yaml
#如果是下载到Windows下上传到系统的/root/再执行如下命令
[rootk8s-master k8s]# cp /root/calico.yaml /opt/k8s/[rootk8s-master k8s]# grep image calico.yamlimage: docker.io/calico/cni:v3.25.0imagePullPolicy: IfNotPresentimage: docker.io/calico/cni:v3.25.0imagePullPolicy: IfNotPresentimage: docker.io/calico/node:v3.25.0imagePullPolicy: IfNotPresentimage: docker.io/calico/node:v3.25.0imagePullPolicy: IfNotPresentimage: docker.io/calico/kube-controllers:v3.25.0imagePullPolicy: IfNotPresent#修改配置文件不适用默认的dokcer.io网站下载
[rootk8s-master k8s]# sed -i s#docker.io/##g calico.yaml
# 执行calico.yml
[rootk8s-master k8s]# kubectl apply -f calico.yaml
#查看节点的状态
[rootk8s-master k8s]# kubectl get pod -n kube-system[rootk8s-master k8s]# kubectl get pod -n kube-system
NAME READY STATUS RESTARTS AGE
calico-kube-controllers-cd8566cf-rcqpf 1/1 Running 0 6m39s
calico-node-d2hvm 1/1 Running 0 6m39s
calico-node-mfdqw 1/1 Running 0 6m39s
coredns-6d8c4cb4d-js7jd 1/1 Running 0 4h14m
coredns-6d8c4cb4d-n9m22 1/1 Running 0 4h14m
etcd-k8s-master 1/1 Running 0 4h14m
kube-apiserver-k8s-master 1/1 Running 0 4h14m
kube-controller-manager-k8s-master 1/1 Running 0 4h14m
kube-proxy-fm5gr 1/1 Running 0 3h39m
kube-proxy-grw5b 1/1 Running 0 4h14m
kube-scheduler-k8s-master 1/1 Running 0 4h14m
[rootk8s-master k8s]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master Ready control-plane,master 4h16m v1.23.6
k8s-node01 Ready none 3h41m v1.23.6
[rootk8s-master k8s]#总结整体的部署思路/过程
1、根据要求安装虚拟机 k8s-master (2个CPU 4G内存) k8s-node
2、对系统初始化设置Yum源配置 防火墙配置 SELINUX 主机名配置 虚拟内存 hosts文件设置
3、安装docker kubelet kubeadm kubectl
4、在k8s-master上配置 初始化 kubeadm init
5、在k8s-node 上 kubeadm join
6、互通网络管理插件