使用kubeadm方式搭建K8S集群
使用kubeadm方式搭建K8S集群kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具。 这个工具能通过两条指令完成一个kubernetes集群的部署: 12345# 创建一个 Master 节点kubeadm init# 将一个 Node 节点加入到当前集群中kubeadm join <Master节点的IP和端口 > Kubeadm方式搭建K8S集群使用kubeadm方式搭建K8s集群主要分为以下几步 准备三台虚拟机,同时安装操作系统CentOS 7.x 对三个安装之后的操作系统进行初始化操作 在三个节点安装 docker kubelet kubeadm kubectl 在master节点执行kubeadm init命令初始化 在node节点上执行 kubeadm join命令,把node节点添加到当前集群 配置CNI网络插件,用于节点之间的连通【失败了可以多试几次】 通过拉取一个nginx进行测试,能否进行外网测试 安装要求在开始之前,部署Kubernetes集群机器需要满足以下几个条件: 一台或多台机器,操作系统 CentOS7.x ...
使用二进制方式搭建K8S集群
使用二进制方式搭建K8S集群注意【暂时没有使用二进制方式搭建K8S集群,因此本章节内容不完整… 欢迎小伙伴能补充~】 准备工作在开始之前,部署Kubernetes集群机器需要满足以下几个条件 一台或多台机器,操作系统CentOS 7.x 硬件配置:2GB ,2个CPU,硬盘30GB 集群中所有机器之间网络互通 可以访问外网,需要拉取镜像,如果服务器不能上网,需要提前下载镜像导入节点 禁止swap分区 步骤 创建多态虚拟机,安装Linux系统 操作系统的初始化 为etcd 和 apiserver 自签证书 部署etcd集群 部署master组件【安装docker、kube-apiserver、kube-controller-manager、kube-scheduler、etcd】 部署node组件【安装kubelet、kube-proxy、docker、etcd】 部署集群网络 准备虚拟机首先我们准备了两台虚拟机,来进行安装测试 主机名 ip k8s_2_master 192.168.177.140 k8s_2_node 192.168.177.141 操作系统 ...
Kubeadm和二进制方式对比
Kubeadm和二进制方式对比Kubeadm方式搭建K8S集群 安装虚拟机,在虚拟机安装Linux操作系统【3台虚拟机】 对操作系统初始化操作 所有节点安装Docker、kubeadm、kubelet、kubectl【包含master和slave节点】 安装docker、使用yum,不指定版本默认安装最新的docker版本 修改docker仓库地址,yum源地址,改为阿里云地址 安装kubeadm,kubelet 和 kubectl k8s已经发布最新的1.19版本,可以指定版本安装,不指定安装最新版本 yum install -y kubelet kubeadm kubectl 在master节点执行初始化命令操作 kubeadm init 默认拉取镜像地址 K8s.gcr.io国内地址,需要使用国内地址 安装网络插件(CNI) kubectl apply -f kube-flannel.yml 在所有的node节点上,使用join命令,把node添加到master节点上 测试kubernetes集群 二进制方式搭建K8S集群 安装虚拟机和操作系统, ...
Kubernetes集群管理工具kubectl
Kubernetes集群管理工具kubectl概述kubectl是Kubernetes集群的命令行工具,通过kubectl能够对集群本身进行管理,并能够在集群上进行容器化应用的安装和部署 命令格式命令格式如下 1kubectl [command] [type] [name] [flags] 参数 command:指定要对资源执行的操作,例如create、get、describe、delete type:指定资源类型,资源类型是大小写敏感的,开发者能够以单数 、复数 和 缩略的形式 例如: 123kubectl get pod pod1kubectl get pods pod1kubectl get po pod1 name:指定资源的名称,名称也是大小写敏感的,如果省略名称,则会显示所有的资源,例如 1kubectl get pods flags:指定可选的参数,例如,可用 -s 或者 -server参数指定Kubernetes API server的地址和端口 常见命令kubectl help 获取更多信息通过 help命令,能够获取帮助信息 12345# 获取k ...
Kubernetes集群YAML文件详解
Kubernetes集群YAML文件详解概述k8s 集群中对资源管理和资源对象编排部署都可以通过声明样式(YAML)文件来解决,也就是可以把需要对资源对象操作编辑到YAML 格式文件中,我们把这种文件叫做资源清单文件,通过kubectl 命令直接使用资源清单文件就可以实现对大量的资源对象进行编排部署了。一般在我们开发的时候,都是通过配置YAML文件来部署集群的。 YAML文件:就是资源清单文件,用于资源编排 YAML文件介绍YAML概述YAML :仍是一种标记语言。为了强调这种语言以数据做为中心,而不是以标记语言为重点。 YAML 是一个可读性高,用来表达数据序列的格式。 YAML 基本语法 使用空格做为缩进 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可 低版本缩进时不允许使用Tab 键,只允许使用空格 使用#标识注释,从这个字符一直到行尾,都会被解释器忽略 使用 — 表示新的yaml文件开始 YAML 支持的数据结构对象键值对的集合,又称为映射(mapping) / 哈希(hashes) / 字典(dictionary) 123456# 对象类型:对象的一组键值对,使用冒号 ...
Kubernetes核心技术Pod
Kubernetes核心技术PodPod概述Pod是K8S系统中可以创建和管理的最小单元,是资源对象模型中由用户创建或部署的最小资源对象模型,也是在K8S上运行容器化应用的资源对象,其它的资源对象都是用来支撑或者扩展Pod对象功能的,比如控制器对象是用来管控Pod对象的,Service或者Ingress资源对象是用来暴露Pod引用对象的,PersistentVolume资源对象是用来为Pod提供存储等等,K8S不会直接处理容器,而是Pod,Pod是由一个或多个container组成。 Pod是Kubernetes的最重要概念,每一个Pod都有一个特殊的被称为 “根容器”的Pause容器。Pause容器对应的镜像属于Kubernetes平台的一部分,除了Pause容器,每个Pod还包含一个或多个紧密相关的用户业务容器。 Pod基本概念 最小部署的单元 Pod里面是由一个或多个容器组成【一组容器的集合】 一个pod中的容器是共享网络命名空间 Pod是短暂的 每个Pod包含一个或多个紧密相关的用户业务容器 Pod存在的意义 创建容器使用docker,一个docker对应一个容器,一个容器 ...
Kubernetes核心技术-Controller
Kubernetes核心技术-Controller内容 什么是Controller Pod和Controller的关系 Deployment控制器应用场景 yaml文件字段说明 Deployment控制器部署应用 升级回滚 弹性伸缩 什么是ControllerController是在集群上管理和运行容器的对象,Controller是实际存在的,Pod是虚拟机的 Pod和Controller的关系Pod是通过Controller实现应用的运维,比如弹性伸缩,滚动升级等 Pod 和 Controller之间是通过label标签来建立关系,同时Controller又被称为控制器工作负载 Deployment控制器应用 Deployment控制器可以部署无状态应用 管理Pod和ReplicaSet 部署,滚动升级等功能 应用场景:web服务,微服务 Deployment部署应用之前我们也使用Deployment部署过应用,如下代码所示 1kubectrl create deployment web --image=nginx 但是上述代码不是很好的进行复用,因为每次我们都需要重新输入代 ...
Kubernetes核心技术Service
Kubernetes核心技术ServiceService存在的意义防止Pod失联【服务发现】因为Pod每次创建都对应一个IP地址,而这个IP地址是短暂的,每次随着Pod的更新都会变化,假设当我们的前端页面有多个Pod时候,同时后端也多个Pod,这个时候,他们之间的相互访问,就需要通过注册中心,拿到Pod的IP地址,然后去访问对应的Pod 定义Pod访问策略【负载均衡】页面前端的Pod访问到后端的Pod,中间会通过Service一层,而Service在这里还能做负载均衡,负载均衡的策略有很多种实现策略,例如: 随机 轮询 响应比 Pod和Service的关系这里Pod 和 Service之间还是根据 label 和 selector 建立关联的 【和Controller一样】 我们在访问service的时候,其实也是需要有一个ip地址,这个ip肯定不是pod的ip地址,而是 虚拟IP vip Service常用类型Service常用类型有三种 ClusterIp:集群内部访问 NodePort:对外访问应用使用 LoadBalancer:对外访问应用使用,公有云 举例我们 ...
Kubernetes控制器Controller详解
Kubernetes控制器Controller详解删除svc 和 statefulset使用下面命令,可以删除我们添加的svc 和 statefulset 123kubectl delete svc webkubectl delete statefulset --all statefulsetstatefulset主要是用来部署有状态应用 无状态应用我们原来使用deployment,部署的都是无状态的应用,那什么是无状态应用? 认为Pod都是一样的 没有顺序要求 不考虑应用在哪个node上运行 能够进行随意伸缩和扩展 有状态应用上述的因素都需要考虑到 让每个Pod独立的 让每个Pod独立的,保持Pod启动顺序和唯一性 唯一的网络标识符,持久存储 有序,比如mysql中的主从 部署有状态应用无头service, ClusterIp:none 这里就需要使用 StatefulSet部署有状态应用 然后通过查看pod,能否发现每个pod都有唯一的名称 然后我们在查看service,发现是无头的service 这里有状态的约定,肯定不是简简单单通过名称来进行约定,而是更加复杂 ...
Kubernetes配置管理
Kubernetes配置管理SecretSecret的主要作用就是加密数据,然后存在etcd里面,让Pod容器以挂载Volume方式进行访问 场景:用户名 和 密码进行加密 一般场景的是对某个字符串进行base64编码 进行加密 1echo -n 'admin' | base64 变量形式挂载到Pod 创建secret加密数据的yaml文件 secret.yaml 然后使用下面命令创建一个pod 1kubectl create -f secret.yaml 通过get命令查看 1kubectl get pods 然后我们通过下面的命令,进入到我们的容器内部 1kubectl exec -it mypod bash 然后我们就可以输出我们的值,这就是以变量的形式挂载到我们的容器中 1234# 输出用户echo $SECRET_USERNAME# 输出密码echo $SECRET_PASSWORD 最后如果我们要删除这个Pod,就可以使用这个命令 1kubectl delete -f secret-val.yaml 数据卷形式挂载首先我们创建 ...