免费的网页网站,厦门seo公司,微信小游戏开发平台,物流公司名字一、kubernetes 简介
谷歌2014年开源的管理工具项目#xff0c;简化微服务的开发和部署。 提供功能#xff1a;自愈和自动伸缩、调度和发布、调用链监控、配置管理、Metrics监控、日志监控、弹性和容错、API管理、服务安全等。官网#xff1a;https://kubernetes.io/zh-cn…一、kubernetes 简介
谷歌2014年开源的管理工具项目简化微服务的开发和部署。 提供功能自愈和自动伸缩、调度和发布、调用链监控、配置管理、Metrics监控、日志监控、弹性和容错、API管理、服务安全等。官网https://kubernetes.io/zh-cn/GitHub地址https://github.com/kubernetes/kubernetes
1.1、Kubernetes 主要功能
1.自我修复当某个容器崩溃时能够在1秒左右迅速启动新的容器2.弹性伸缩根据需要自动对集群中正在运行的容器数量进行调整3.服务发现服务可以通过自动发现的形式找到它所依赖的服务4.负载均衡当一个服务起动了多个容器能够自动实现请求的负载均衡5.版本回退当发现新发布的程序版本有问题可以立即回退到原来的版本6.存储编排根据容器自身的需求自动创建存储卷Pod中容器之间共享数据
1.2、Kunbernetes 主要概念
1.Master集群控制节点每个集群需要至少一个master节点负责集群的管控2.Node工作负载节点由master分配容器到这些node工作节点上然后node节点上的docker负责容器的运行3.Podkubernetes的最小控制单元容器都是运行在pod中的一个pod中可以有1个或者多个容器4.Controller控制器通过它来实现对pod的管理比如启动pod、停止pod、伸缩pod的数量等等5.Servicepod对外服务的统一入口下面可以维护者同一类的多个pod6.Label标签用于对pod进行分类同一类pod会拥有相同的标签7.NameSpace命名空间用来隔离pod的运行环境
1.3、组件
一个kubernetes集群主要是由控制节点(master)、工作节点(node)构成每个节点上都会安装不同的组件。
1.Master负责集群的决策管理2.ApiServer : 资源操作的唯一入口接收用户输入的命令提供认证、授权、API注册和发现等机制3.Scheduler : 负责集群资源调度按照预定的调度策略将Pod调度到相应的node节点上4.ControllerManager : 负责维护集群的状态比如程序部署安排、故障检测、自动扩展、滚动更新等5.Etcd负责存储集群中各种资源对象的信息6.Node负责为容器提供运行环境7.Kubelet : 负责维护容器的生命周期即通过控制docker来创建、更新、销毁容器8.KubeProxy : 负责提供集群内部的服务发现和负载均衡9.Docker : 负责节点上容器的各种操作
1.3.1、节点组成 1.master 主节点
Etcd整个集群的数据库存储集群的状态数据、配置、节点等采用 Raft 协议。API-server连其它组件、Etcd提供各类 api 处理和 Node节点 通信等。对外提供操作和获取 k8s 集群资源的 API。Scheduler在 k8s 集群中做调动决策负责资源的调度、打分、分配资源。Controller-Manager控制各类 Controller观察、维护集群的状态故障检测、自动扩展、滚动更新等协调让实际状态和预期状态达到一致。
2.work 从节点
Docker负责容器创建和管理。Kubelet管理容器的生命周期与 master 节点交互汇报自身情况。Kube-proxy网络代理Pod 寻址、负载均衡等。
1.4、工作流程
1.当kubernetes启动后master和node将自身的信息存储到etcd数据库中2.一个服务的安装请求会首先被发送到master节点的apiServer组件3.apiServer调用scheduler组件来决定服务安应该装到哪个node节点上从etcd中读取各个node节点的信息4.apiServer调用controller-manager去调度Node节点安装服务5.kubelet接收到指令后会通知docker由docker来启动一个服务pod6.访问服务要通过kube-proxy来对pod产生访问的代理如此就可以访问集群中的服务了。
二、使用
2.1、常用命令
# 查看命令
kubectl --help# 查询k8s集群节点
kubectl get nodes# 查看所有的pod
kubectl get pod# 查看pod详细内容
kubectl describe pod nginx-6867cdf567-ht2bz# 查看k8s 集群的信息
kubectl cluster-info# 查看当前k8s 集群的版本
kubectl version #命令形式创建一个namespace
kubectl create namespace udiannet-dev# 查询所有的namespace
kubectl get ns# 在udiannet-dev的namespace 下运行一个pod
kubectl run pod --imagenginx -n udiannet-dev# 查看udiannet-dev下的pod
kubectl get pod -n udiannet-dev# 查看该pod的详细信息要制定namespace
kubectl describe pod pod-864f9875b9-492tz -n udiannet-dev# 删除该pod要指定namespace
kubectl delete pods pod-864f9875b9-492tz -n udiannet-dev# 创建一容器镜像为 nginx 名称为 nginx-test 的 Pod 并在 8080 端口将其暴露为与Pod 同名的 Service
kubectl run nginx-test --imagenginx --port8080 --expose
NameSpace的创建
# 创建一个namespace
[k8sadministrator root]$ kubectl create namespace test
namespace/test created# 查看namespace
[k8sadministrator root]$ kubectl get ns
NAME STATUS AGE
default Active 3d3h
kube-node-lease Active 3d3h
kube-public Active 3d3h
kube-system Active 3d3h
test Active 8s# 创建并运行一个nginx的Pod资源
[k8sadministrator root]$ kubectl run nginx-pod --imagenginx -n test
pod/nginx-pod created# 查看test命名空间下新创建的pod
[k8sadministrator root]$ kubectl get pod -n test
NAME READY STATUS RESTARTS AGE
nginx-pod 1/1 Running 0 8s# 查看默认namespace中的资源
[k8sadministrator root]$ kubectl get pods
No resources found in default namespace.# 删除指定的pod
[k8sadministrator root]$ kubectl delete pod nginx-pod -n test
pod nginx-pod deleted# 删除命名空间
[k8sadministrator root]$ kubectl delete ns test
namespace test deleted# 查看命名空间
[k8sadministrator root]$ kubectl get ns
NAME STATUS AGE
default Active 3d3h
kube-node-lease Active 3d3h
kube-public Active 3d3h
kube-system Active 3d3h# 查看某个NS同时指定输出格式常用格式wide、json、yaml
[k8sadministrator ~]$ kubectl get ns default -o json
{apiVersion: v1,kind: Namespace,metadata: {creationTimestamp: 2022-03-21T09:00:52Z,labels: {kubernetes.io/metadata.name: default},name: default,resourceVersion: 212,uid: 2c41f796-922b-426c-a5f4-78627e008e6b},spec: {finalizers: [kubernetes]},status: {phase: Active}
}# 查看ns详情
[k8sadministrator ~]$ kubectl describe ns default
Name: default
Labels: kubernetes.io/metadata.namedefault
Annotations: none
Status: ActiveNo resource quota.No LimitRange resource.
2.2、部署 2.3、项目应用