前言 k8s全称kubernetes,是一个开源的容器编排引擎,用来对容器化应用进行自动化部署、 扩缩和管理。该项目托管在 CNCF。目前k8s已经成为发展最快、市场占有率最高的容器编排引擎产品,越来越多企业正在拥抱k8s,推动微服务、容器等热门技术的普及和落地。 对于 k8s这项平台级技术,覆盖的技术范围非常广,包括了计算、网络、存储、高可用、监控、日志管理等多个方面。越是门槛高的知识,就越需要搭建一个最小可用系统,先把玩起来,快速了解基本概念、功能和使用场景,建立起对学习对象的感性认识。如果直接上来就学习理论知识和概念,很容易从入门到放弃。 0. 目录 1. k8s基础知识 2. 部署环境 3. CentOS初始化配置 4. Master节点配置 5. Worker节点配置 6. 使用k8s部署应用 7. 后记 8. 参考文献 1. k8s基础知识 k8s集群是主从分布式架构,由Master Node和Worker Node组成,节点上运行着k8s组件服务。 Master 是 Cluster 的大脑,主要职责是调度,运行的 k8s 组件有kube-apiserver、kube-scheduler、kube-controller-manager、etcd 和 Pod 网络(例如 flannel)。可以同时运行多个 Master实现高可用。 API Server(kube-apiserver):提供 HTTP/HTTPS RESTful API,实现认证、授权、访问控制、API注册和发现等功能,各种客户端工具(CLI 或 UI)以及 k8s 其他组件可以通过它管理 Cluster 资源。 Scheduler(kube-scheduler):负责决定将 Pod 放在哪个 Node 上运行。Scheduler 在调度时会充分考虑 Cluster 的拓扑结构、当前各个节点的负载以及应用对高可用、性能、数据亲和性的需求。 Controller Manager(kube-controller-manager):负责管理 Cluster 各种资源,保证资源处于预期的状态。Controller Manager 由多种 controller 组成,包括 replication controller、endpoints controller、namespace controller、serviceaccounts controller 等。不同的 controller 管理不同的资源。例如 replication controller 管理 Deployment、StatefulSet、DaemonSet 的生命周期,namespace controller 管理 Namespace 资源。 etcd :负责保存 Cluster 的配置信息和各种资源的状态信息。当数据发生变化时,etcd 会快速地通知 k8s相关组件。 Pod 网络:Pod 是 k8s的最小工作单元。每个 Pod 包含一个或多个容器。Pod 中的容器会作为一个整体被 Master 调度到一个 Worker上运行。Pod 要能够相互通信,Cluster 必须部署 Pod 网络,flannel 是其中一个可选方案。 Worker是 Pod 运行的地方,k8s 支持 Docker、rkt 等容器 Runtime。Worker上运行的组件有 kubelet、kube-proxy 和 Pod 网络。Worker 由 Master 管理,负责监控并向Master汇报容器的状态,并根据 Master 的要求管理容器的生命周期。 kubelet:是 Worker的 agent,当 Scheduler 确定在某个 Worker上运行 Pod 后,会将 Pod 的具体配置信息(image、volume 等)发送给该节点的 kubelet,kubelet 根据这些信息创建和运行容器,并向 Master 报告运行状态。 kube-proxy:service 在逻辑上代表了后端的多个 Pod,外界通过 service 访问 Pod。service 接收到的请求是如何转发到 Pod 的呢?这就是 kube-proxy 要完成的工作。每个 Worker都会运行 kube-proxy 服务,负责将访问 service 的 TCP/UPD 数据流转发到后端的容器。如果有多个副本,kube-proxy 会实现负载均衡。 2. 部署环境 本次实验将搭建一个包含1个Master 节点 + 2个Worker 节点的k8s集群环境。 操作系统版本:CentOS 7.9 k8s版本:1.20.15 docker版本:19.3.5 主机名 ip k8s-master 10.10.10.128 k8s-worker1 10.10.10.131 k8s-worker2 10.10.10.132 3. CentOS初始化配置 TIPS:本次实验准备了3台CentOS 虚拟机,为了减少重复劳动,可以先初始化配置好一台虚拟机,再克隆出另外两台虚拟机(记得要修改IP)。 (1)更新yum源(非必须) yum update -y (2)配置网络 cd /etc/sysconfig/network-scripts/ # 进入网络配置目录 vim ifcfg-ens36 # 编辑对应网卡的配置文件,我的环境是ens36 # 修改网卡配置文件内容如下所示 TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=static # BOOTPROTO的值由dhcp改为static,设为静态IP DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=ens36 DEVICE=ens36 ONBOOT=yes # ONBOOT的值由no改为yes IPADDR=10.10.10.128 NETMASK=255.255.255.0 GATEWAY=10.10.10.2 # 设置网关,就可以过NAT形式上外网 DNS1=10.10.10.2 ZONE=public PREFIX=24 service network restart # 重启网络服务使新配置生效 (3)修改主机名 hostnamectl set-hostname k8s-master # 修改主机名,重新打开终端即可看到主机名已修改成功 # 采取类似方法修改两台worker节点的主机名 hostnamectl set-hostname k8s-worker1 # 修改10.10.10.131的主机名 hostnamectl set-hostname k8s-worker2 # 修改10.10.10.132的主机名 (4)配置hosts vim /etc/hosts # 添加以下3行 10.10.10.128 k8s-master 10.10.10.131 k8s-worker1 10.10.10.132 k8s-worker2 (5)关闭主机防火墙 systemctl stop firewalld # 关闭防火墙 systemctl disable firewalld # 禁用开机自启动 (6)关闭selinux [root@localhost ~]# getenforce # 查看selinux状态 Enforcing # selinux未关闭 [root@localhost ~]# setenforce 0 # 临时关闭selinux [root@localhost ~]# getenforce # 查看selinux状态 Permissive # selinux已关闭 #永久关闭selinux的方法 vim /etc/sysconfig/selinux 将SELINUX=enforcing 替换为SELINUX=disabled,需重启主机 (7)关闭swap # 临时关闭 swapoff -a # 永久关闭swap vim /etc/fstab 注释掉最后一行关于swap的配置 (8)将桥接的IPv4流量传递到iptables的链 touch /etc/sysctl.d/k8s.conf # k8s.conf文件原来不存在,需要新建 vim /etc/sysctl.d/k8s.conf # 添加下面4行 net.bridge.bridge-nf-call-ip6tables=1 net.bridge.bridge-nf-call-iptables=1 net.ipv4.ip_forward=1 vm.swappiness=0 sysctl --system # 加载系统参数,使配置生效 (9)安装docker rpm -qa | grep docker # 查看是否已安装docker组件 yum remove docker docker-common docker-client # 如已安装,则卸载旧版docker相关组件 yum install -y yum-utils #安装yum-utils,提供yum-config-manager命令 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo #添加阿里云的yum源,便于快速下载docker yum list docker-ce --showduplicates | sort -r #查看可获取的docker版本 yum install -y docker-ce-19.03.5 docker-ce-cli-19.03.5 containerd.io # 安装指定版本的docker,这里选择19.03.5 systemctl enable docker # 设置开机自启动 systemctl start docker # 启动docker服务 systemctl status docker # 查看docker服务状态 (10)安装k8s 添加阿里云yum源,便于快速下载k8s cat
这是宝宝大脑发育快的阶段,把握住黄金期,宝宝更聪明文余明仁二月一直是无数妈妈后怕的一个阶段,因为不少妈妈都说这是宝宝二月闹的阶段,在二月这个阶段宝宝的发育速度其实是很快的,之所以宝宝会出现二月闹也是跟宝宝发育速度快有关系,宝宝发育上线就夺飙升榜第一,王李丹妮演武则天,除了身材火辣毫无看点近两年悬疑题材无论是在电视剧市场,还是在电影市场都备受好评,当下热播网剧显微镜下的大明之丝绢案把悬疑看点放置在了离奇的丝绢税上,以算术与案情相结合,情节跌宕曲折,看得人越来越上头。因为一部上海滩十三太保,刘德华和傅声产生了怎样的缘分?十三太保,一夫当道。上海滩十三太保1984年4月30日,动作电影上海滩十三太保在香港上映,由张彻执导,狄龙姜大卫陈观泰李修贤王羽王青梁家仁程天赐戚冠军常枫张泰伦江生鹿峰等著名动作明贾冰你不是黑社会我都不信了电视剧狂飙中贾冰所扮演的徐江,不止说是入木三分,真的可谓是活灵活现生动自然呀,这哪里是贾冰在扮演徐江,这就是徐江本色出演呀。可能因为贾冰之前无论是小品还是电影电视剧都是在做喜剧,所嘎子谢孟伟现身回应手机风波!信誓旦旦很自信,发维权动态被嘲讽近日,嘎子谢孟伟再次登上热搜,原因就是因为他卖的手机发生了问题,被指出疑似虚假售卖,价格不实,引发了网友们的热议,这才让他因为这些负面新闻登上了热搜,面对这次的手机风波,谢孟伟本人听说你喜欢我董苗苗回国,宁至谦再次动摇,阮流筝转投薛纬霖听说你喜欢我是由彭冠英王楚然啜妮刘芮麟领衔主演,毛林林杜雨宸李子峰田雷朱俊麟李洪涛等特别出演的一部都市情感剧。随着剧情的发展,很多观众都被阮流筝这个角色所打动。再加上王楚然清新脱俗突发!陈凯歌陈红儿子陈飞宇大瓜曝光,知名狗仔曝其与网红私密照娱乐圈顶流恋情瓜,揭晓了!2月13日,距离情人节就剩十几个小时了,当很多有情人都在筹备明日的惊喜时,娱乐圈一位顶流男星却遭遇了惊吓。这位男星就是陈凯歌和陈红的儿子陈飞宇。万万没想到宰相刘罗锅26年,9位主演有人遭封杀,有人离世,物是人非天地之间有杆秤,那秤砣是老百姓,秤杆子挑江山,伊啊伊儿哟哎你就是定盘的星熟悉的旋律来自于1996年开播的宰相刘罗锅,此剧一经开播备受观众的喜爱,主题曲朗朗上口唱遍大街小巷。有别于一如果不采取避孕,女性一生能生多少个孩子?目前有宝妈生了69个邻居家的老奶奶,她有8个子女,每次逢年过节的时候,家里就会有一大家子人,热闹非凡。让人很是羡慕,当说起老奶奶怎么那么能生时,老奶奶却笑着说,他一姐妹生了13个,生8个的多了去了,心要毁掉一个孩子请给他一部手机不知从何时起,手机已进入人们的日常生活。大家开会在看手机,上课在看手机,约会在看手机,聚餐也在看手机,回到家还在看手机。这是大人们的日常写照。作为家长还是要让孩子远离手机,否则可以孩子不见了,应该怎么办?头条创作挑战赛中午,校长吃完饭,回办公室时,看到两个孩子从教学楼方向往北走了。一会儿,两个孩子不见了。校长很着急,不知两个孩子去哪儿了?看看时间,1200点多了,此刻孩子应该吃完饭