Kubernetes 安装部署指南:从入门到精通 (kubernetes)
Kubernetes 安装部署指南:从入门到精通
概述
Kubernetes 是一个开源容器编排系统,用于自动化容器化应用程序的部署、管理和扩展。本指南将带您逐步了解 Kubernetes 的安装、部署和高级功能,让您从入门到精通 Kubernetes。
入门
先决条件
- 带有至少 2 个 CPU 内核和 2 GB RAM 的 Linux 服务器
- Docker 已安装并正在运行
安装
- 在每台节点上安装 Kubeadm:
- 初始化 Kubernetes 集群:
sudo apt-get install kubeadm
kubeadm init --pod-network-cidr=10.244.0.0/16
配置网络
- 创建 Pod 网络插件:
- 配置 DNS 和服务发现:
kubectl apply -f
kubectl apply -f
部署一个应用程序
- 创建一个部署:
- 创建服务:
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --type=NodePort --port=80
部署高级功能
自动伸缩
- 创建一个水平自动伸缩器:
kubectl autoscale deployment nginx --min=1 --max=5 --cpu-percent=80
存储卷
- 创建一个 PersistentVolume:
- 创建一个 PersistentVolumeClaim:
- 将存储卷挂载到 Pod:
kubectl create pv pvc-data --type LocalVolume --local-path=/data
kubectl create pvc pvc-data --storage-class=local-storage
apiVersion: v1kind: Podmetadata:name: nginx-with-pvcspec:containers:- name: nginximage: nginxvolumeMounts:- name: pvc-datamountPath: /datavolumes:- name: pvc-datapersistentVolumeClaim:claimName: pvc-data
Ingress
- 安装 Nginx Ingress 控制器:
- 创建 Ingress 资源:
kubectl apply -f
apiVersion: networking.k8s.io/v1kind: Ingressmetadata:name: my-ingress
spec:rules:- host: myapp.example.comhttp:paths:- path: /backend:service:name: my-serviceport:number: 80
故障排查
日志记录
- 查看 Pod 日志:
- 查看节点日志:
kubectl logs my-pod
kubectl logs my-node --namespace=kube-system
事件
- 查看 Kubernetes 事件:
- 查看 Pod 事件:
kubectl get events
kubectl describe pod my-pod
资源监控
- 使用 Kubectl top 命令:
- 使用 Heapster 或 Prometheus 等监控工具:
kubectl top nodeskubectl top pods
kubectl apply -f
结论
本指南为您提供了 Kubernetes 安装、部署和高级功能的全面概述。通过遵循这些步骤,您可以搭建一个基本功能的 Kubernetes 集群,并逐渐扩展其功能,以满足您的特定需求。随着您对 Kubernetes 的深入了解,您将能够有效地管理和扩展您的容器化应用程序。
超全K8s集群构建指南,建议收藏
1. 什么是kubernetes Kubernetes(k8s)是Google开源的容器集群管理系统(谷歌内部:Borg)。在Docker技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能,提高了大规模容器集群管理的便捷性。
2. kubernetes核心组件说明 Kubernetes 集群中主要存在两种类型的节点,分别是 master 节点 ,以及 minion 节点 。
Minion 节点是实际运行 Docker 容器的节点,负责和节点上运行的 Docker 进行交互,并且提供了代理功能。
Master 节点负责对外提供一系列管理集群的 API 接口,并且通过和 Minion 节点交互来实现对集群的操作管理。
apiserver :用户和 kubernetes 集群交互的入口,封装了核心对象的增删改查操作,提供了 RESTFul 风格的 API 接口,通过 etcd 来实现持久化并维护对象的一致性。
scheduler :负责集群资源的调度和管理,例如当有 pod 异常退出需要重新分配机器时,scheduler 通过一定的调度算法从而找到最合适的节点。
controller-manager :主要是用于保证 replicationController 定义的复制数量和实际运行的 pod 数量一致,另外还保证了从 service 到 pod 的映射关系总是最新的。
kubelet :运行在 minion 节点,负责和节点上的 Docker 交互,例如启停容器,监控运行状态等。
proxy :运行在 minion 节点,负责为 pod 提供代理功能,会定期从 etcd 获取 service 信息,并根据 service 信息通过修改 iptables 来实现流量转发(最初的版本是直接通过程序提供转发功能,效率较低。),将流量转发到要访问的 pod 所在的节点上去。
etcd :key-value键值存储数据库,用来存储kubernetes的信息的。
flannel :Flannel 是 CoreOS 团队针对 Kubernetes 设计的一个覆盖网络(Overlay Network)工具,需要另外下载部署。
我们知道当我们启动 Docker 后会有一个用于和容器进行交互的 IP 地址,如果不去管理的话可能这个 IP 地址在各个机器上是一样的,并且仅限于在本机上进行通信,无法访问到其他机器上的 Docker 容器。
Flannel 的目的就是为集群中的所有节点重新规划 IP 地址的使用规则,从而使得不同节点上的容器能够获得同属一个内网且不重复的 IP 地址,并让属于不同节点上的容器能够直接通过内网 IP 通信。
3. Kubernetes的核心概念
运行于Node节点上,若干相关容器的组合。Pod内包含的容器运行在同一宿主机上,使用相同的网络命名空间、IP地址和端口,能够通过localhost进行通。
Pod是Kurbernetes进行创建、调度和管理的最小单位,它提供了比容器更高层次的抽象,使得部署和管理更加灵活。一个Pod可以包含一个容器或者多个相关容器。
Replication Controller Replication Controller用来管理Pod的副本,保证集群中存在指定数量的Pod副本。
集群中副本的数量大于指定数量,则会停止指定数量之外的多余容器数量,反之,则会启动少于指定数量个数的容器,保证数量不变。
Replication Controller是实现弹性伸缩、动态扩容和滚动升级的核心。
Service定义了Pod的逻辑集合和访问该集合的策略,是真实服务的抽象。
Service提供了一个统一的服务访问入口以及服务代理和发现机制,用户不需要了解后台Pod是如何运行。
Kubernetes中的任意API对象都是通过Label进行标识,Label的实质是一系列的K/V键值对。Label是Replication Controller和Service运行的基础,二者通过Label来进行关联Node上运行的Pod。
Node是Kubernetes集群架构中运行Pod的服务节点(或agent)。
Node是Kubernetes集群操作的单元,用来承载被分配Pod的运行,是Pod运行的宿主机。
4. 前置条件设置 三台Centos7系统的虚拟机(1个master+2个node),三台机器上的防火墙,SELINUX全部关掉。我的实验坏境可以上网,默认的YUM源就可以用。
5. 部署规划 192.168.10.1 # master节点(etcd,kubernetes-master)192.168.10.2 # node1节点(etcd,kubernetes-node,docker,flannel)192.168.10.3 # node2节点(etcd,kubernetes-node,docker,flannel)
6. 开始安装
step1:在master上安装 yum install kubernetes-master etcd flannel -y
step2:在node上安装 yum install kubernetes-node etcd flannel -y
step3:etcd集群配置 在master节点上编辑etcd配置文件
在node1节点上编辑etcd配置文件
在node2节点上编辑etcd配置文件
到此etcd集群就部署完了,然后每个节点上启动systemctl start etcd
step4:验证
step6:启动Master上的三个服务
step7:kubernetes node安装
node2 节点重复上述操作step8:分别启动kubernetes node服务
7. 网络配置 因为kubernetes集群中网络部分是插件形式安装的,我们这里选用flannel上述安装步骤已经install 了
为flannel创建分配的网络
8. 执行kubectl 命令检查 在master上执行下面,检查kubernetes的状态
9. 常用排错命令如下
一、Mac 下使用虚拟机安装 Kubernetes
电脑 8 核 16 G1. 安装 VMware2. 安装 Centos3. 配置阿里云 a. cp /etc/.d/ /etc/.d/ b. wget -O /etc/.d/. yum makecache d. yum update e. yum clean all4. 配置静态网络(可省略) a. cat /Library/Preferences/VMware Fusion/vmnet8/. 获取 IPADDRii. 获取 NETMASK b. /qLibrary/Preferences/VMware Fusion/vmnet8/. 获取GATEWAY c. vi /etc/sysconfig/network-scripts/ifcfg-ens33i. BOOTPROTO=static(ip地址设置为静态的)ii. IPADDR=上面mac中找到的ip范围中设置一个iii. NETMASK=255.255.255.0(也是从上面得到)iv. GATEWAY=设置上面mac中看到的gatway地址,即router路由地址(192.168.181.2)v. ONBOOT=yesvi. DNS1=x.x.x.x(在mac,网络,高级里面的选项卡能够找到 d. systemctl restart 5. 安装 docker 15 a. mkdir /etc/.d/bak b. cp /etc/.d/* /etc/.d/bak c. wget -O /etc/.d/. yum clean all && yum makecache e. yum install -y 7 f. systemctl enable docker && systemctl start docker g. docker version 6. 安装 kubernetes a. 配置国内Kubernetes源 cat <<EOF > /etc/.d/ [kubernetes] name=Kubernetes baseurl=enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=EOF b. yum install -y kubelet-1.15.0 kubeadm-1.15.0 kubectl-1.15.17. 部署 Kubernetes a. systemctl stop firewalld & systemctl disable firewalld 关闭防火墙 b. swapoff -a c. setenforce 0 关闭 Selinux d. 修改/etc/sysconfig/selinux文件 SELINUX=disabled e. 创建/etc/sysctl.d/ -nf-call-iptables = 1 -nf-call-ip6tables = 1 f. sysctl --system g. 进入 /home/你的文件夹 h. kubeadm config print init-defaults > i. sed -i s/advertiseAddress: .*/advertiseAddress: 你的 IP/g j. sed -i s/podSubnet: .*/podSubnet: \192.168.0.0\/16\/g k. sed -i s/imageRepository: .*/imageRepository: \/google_containers/g l. sed -i s/kubernetesVersion: .*/kubernetesVersion: v1.17.3/g m. kubeadm config images pull --config (拉去镜像) n. kubeadm init --config 初始化 o. 命令照搬 mkdir -p $HOME/ sudo cp -i /etc/kubernetes/ $HOME//config sudo chown $(id -u):$(id -g) $HOME//config8. 安装网络插件 a. wgetb. kubectl apply -f c. 查看安装情况:kubectl get pods --all-namespaces9. kubectl taint nodes --all /master-10. 拍摄快照
基于Linux自己初步搭建Kubernetes(k8s)集群基础,详细教程
k8s官方网站:,可自行查看相关文档说明
k8s-master:Ubuntu--192.168.152.100
k8s-node01:Ubuntu--192.168.152.101
k8s-node02:Ubuntu--192.168.152.102
全部已安装docker,未安装可根据官方文档安装:1,禁止swap分区
K8s的要求,确保禁止掉swap分区,不禁止,初始化会报错。
在每个宿主机上执行:
2,确保时区和时间正确
时区设置
3,关闭防火墙和selinux
ubuntu 查看防火墙命令,ufw status可查看状态,ubuntu20.04默认全部关闭,无需设置。
4,主机名和hosts设置(可选)
非必须,但是为了直观方便管理,建议设置。
在宿主机分别设置主机名:k8s-master,k8s-node01,k8s-node02
hosts设置
1,更改docker默认驱动为systemd
为防止初始化出现一系列的错误,请检查docker和kubectl驱动是否一致,否则kubectl没法启动造成报错。版本不一样,docker有些为cgroupfs,而kubectl默认驱动为systemd,所以需要更改docker驱动。
可查看自己docker驱动命令:
更改docker驱动,编辑 /etc/docker/ (没有就新建一个),添加如下启动项参数即可:
重启docker
需要在每台机器上安装以下的软件包:
2,更新 apt 包索引并安装使用 Kubernetes apt 仓库所需要的包
安装软件包以允许apt通过HTTPS使用存储库,已安装软件的可以忽略
3,下载公开签名秘钥、并添加k8s库
国外 :下载 Google Cloud 公开签名秘钥:
国内:可以用阿里源即可:
请注意,在命令中,使用的是Ubuntu 16.04 Xenial 版本, 是可用的最新 Kubernetes 存储库。所以而非20.04 的focal。
4,更新 apt 包索引,安装 kubelet、kubeadm 和 kubectl,并锁定其版本
锁定版本,防止出现不兼容情况,例如,1.7.0 版本的 kubelet 可以完全兼容 1.8.0 版本的 API 服务器,反之则不可以。
只需要在master上操作即可。
1,初始化错误解决(没有报错的可以跳过这条)
错误提示1:
原因:kubectl没法启动,journalctl -xe查看启动错误信息。
解决方案:k8s建议systemd驱动,所以更改docker驱动即可,编辑 /etc/docker/ (没有就新建一个),添加如下启动项参数即可:
重启docker和kubectel
错误提示2:
原因:初始化生产的文件,重新初始化,需要删除即可
错误提示3:
解决方法:重置配置
2,初始化完成
无报错,最后出现以下,表示初始化完成,根据提示还需要操作。
根据用户是root或者普通用户操作,由于大多环境不会是root用户,我也是普通用户,所以选择普通用户操作命令:
如果是root用户,执行以下命令:
初始化完成,用最后的提示命令 kubeadm join.... 在node机器上加入集群即可。
3,主节点pod网络设置
主节点支持网络插件:这里安装Calico网络插件:Calico官网提供三种安装方式,1)低于50个节点,2)高于50个节点,3)etcd datastore(官方不建议此方法)。
这里选择第一种:
安装完成后, kubectl get node可查看节点状态,由NotReady变成Ready则正常,需要等几分钟完成。
1,node加入master节点
在所有node节点机器操作,统一已安装完成 kubelet、kubeadm 和 kubectl,用master初始化完成后最后提示命令加入,切记要用root用户。
加入成功后,提示如下:
再次查看kubelet服务已正常启动。
2,需注意的坑
1:加入主节点,需要 root 用户执行词条命令,才可以加入master主节点。
node在没有加入主节点master之前,kubelet服务是没法启动的,是正常情况,会报错如下:
原因是缺失文件,主节点master初始化 `kubeadm init`生成。
node节点是不需要初始化的,所以只需要用root用户`kubeadm join`加入master即可生成。
2:如果加入提示某些文件已存在,如:
原因是加入过主节点,即使没成功加入,文件也会创建,所以需要重置节点,重新加入即可,重置命令:
3,在master查看节点
加入完成后,在master节点 kubectl get node 可查看已加入的所有节点:
若对本页面资源感兴趣,请点击下方或右方图片,注册登录后
搜索本页相关的【资源名】【软件名】【功能词】或有关的关键词,即可找到您想要的资源
如有其他疑问,请咨询右下角【在线客服】,谢谢支持!
相关文章
- 释放您的创造力:在线室内设计工具和资源,助您打造独一无二的居住空间 (释放您的创造力英语)
- 掌握室内设计艺术:通过我们的在线课程,提升您的技能,成为室内设计的专家 (掌握室内设计功能与空间尺度的关系)
- 打造您的梦想之家:在线室内设计指南,为您提供专业建议和个性化体验 (打造您的梦想英文)
- 室内设计领域的创新在线解决方案,开启您的家居改造之旅 (室内设计领域有哪些科技成果)
- 将回忆转化为艺术:使用电子相册模板,为你的回忆创作激动人心的叙事 (将回忆转化为爱的句子)
- 释放回忆的力量:借助电子相册模板,唤醒你最珍贵的时刻 (释放回忆的力量作文)
- 重温美好时光:使用电子相册模板,让你的珍贵时刻重新焕发生机 (重温美好时光留住最美记忆)
- 永存你的故事:电子相册模板,将你的生活片段编织成意义非凡的剪影 (故事永远永远爱你)
- 让记忆栩栩如生:通过电子相册模板,赋予你珍贵的时刻新的生命 (记忆栩栩如生)
- 点亮你的回忆:使用电子相册模板,释放照片的感人魅力 (点亮你的回忆是什么歌)
发表评论
评论列表
- 这篇文章还没有收到评论,赶紧来抢沙发吧~