k8s简介以及使用kubeadm本地搭建k8s集群

k8s是什么

Kubernetes 是一个可移植的,可扩展的开源平台,用于管理容器化的工作负载和服务,方便了声明式配置和自动化。它拥有一个庞大且快速增长的生态系统。Kubernetes 的服务,支持和工具广泛可用。Kubernetes 这个名字源于希腊语,意为“舵手”或“飞行员”。k8s 这个缩写是因为 k 和 s 之间有八个字符的关系。容器是打包和运行应用程序的好方式。在生产环境中,你需要管理运行应用程序的容器,并确保不会停机。 例如,如果一个容器发生故障,则需要启动另一个容器。如果系统处理此行为,会不会更容易? 这就是 Kubernetes来解决这些问题的方法!Kubernetes为你提供了一个可弹性运行分布式系统的框架。Kubernetes会满足你的扩展要求、故障转移、部署模式等。例如,Kubernetes可以轻松管理系统的Canary部署。

k8s集群架构

k8s架构

1.主节点(control plane):承载Kubernetes的控制和管理整个集群系统的控制面板

2.工作节点(worker node):运行着用户实际部署的应用

3.Kube-apiserver:所有的控制面板组件和你(client)都需要和他通信(api)

4.Kube-scheculer:调度你的应用,为其分配一个工作节点(调度)

5.kube-controller-manager:执行集群级别的功能,比如复制组件,跟踪工作节点,处理失败节点等(编排)

6.Etcd:兼具一致性和高可用性的键值数据库,可以作为保存Kubernetes所有集群数据的后台数据库。(持久化存储)

7.Kubelet:运行在每个节点的代理,与apiserver通信,并管理他所在节点的容器

8.Kube-proxy:维护节点上的网络规则,这些网络规则允许从集群内部或外部的网络会话与Pod进行网络通信。

9.Container runtime:负责运行容器的软件,比如docker,containerd,rtk

k8s常用命令

kubectl get //获得对应资源的list

kubectl get -oyaml/-ojson //以json格式或yaml格式输出资源

kubectl delete //删除某个资源

kubectl describe //获取某个资源的信息

kubectl logs pod -c //获取pod对应容器的log

kubectl apply –f //依照文件创建对应资源

kubectl exec   -c   -- //在容器中执行某些命令

kubectl cp –c :/${path} /${localpath}//把容器中的某些文件scp到本地

k8s常用资源

pod

一个pod是一组紧密相关(共享某些资源,比如network,volume)的容器,他们总是一起运行在同一个工作节点上,以及同一个Linux namespace中。每个pod拥有自己独立的IP,主机名等,运行一个独立的应用程序。应用程序可以是一个单个进程,也可以是一个主应用进程搭配辅助进程,每个进程都在自己的容器中运行

deployment

在pod中部署容器之后,升级我们的程序可以使用Replicator Controller或者Replicator Set实现,同时kubernetes也提供Deployment(基于Replicator set),并支持声明式的更新应用。当创建一个deployment时,replicatorSet也会随之创建,而实际的pod是由Deployment的replicatorSet创建和管理的。

configmap

ConfigMap是一种API对象,用来将非机密性的数据保存到键值对中。使用时,pods可以将其用作环境变量、命令行参数或者存储卷中的配置文件。ConfigMap将环境配置信息和配置环境解耦,便于应用配置的修改。 ConfigMap在设计上不是用来保存大量数据的。在ConfigMap中保存的数据不可超过1MiB。如果你需要保存超出此尺寸限制的数据,你可能希望考虑挂载存储卷或者使用独立的数据库或者文件服务。

secret

Secret 对象类型用来保存敏感信息,例如密码、OAuth 令牌和SSH 密钥。将这些信息放在 secret 中比放在 Pod 的定义或者容器镜像中来说更加安全和灵活。

service

服务是一种为相同功能的pod提供单一不变的接入点的资源,当服务存在时,他的ip地址和端口不会改变。客户端通过ip地址和端口建立连接,这个连接会被服务路由到任意一个pod中,而客户端不需要知道每个单独提供服务的pod地址。

Ingress

由于每个service都有自己的负载均衡,而想设置一个全局的负载均衡,然后通过url的不同将请求转发给不同的service,这种全局的,代理不同的service的资源就叫做Ingress,其实Ingress就是service的service。

使用kubeadm部署k8s

准备三台vm(1 master, 2slave),配置如下:

然后在每一个节点中先安装docker,要注意修改镜像源的地址到国内。

然后确定每个节点的网络前置环境后,安装kubelet kubeadm 和kubectl

之后使用kubeadm init命令去初始化master节点,然后slave node使用kubeadm join加入集群

之后再部署网络插件,本文以calico为例

至此一个三节点的k8s集群搭建完毕

你可能感兴趣的:(k8s简介以及使用kubeadm本地搭建k8s集群)