k8s的部署
裸机搭建一般有两种方式“kubeadm 方式”和”二进制方式“,Kubeadm 是一个 K8s 部署工具,提供kubeadm init 和 kubeadm join,用于快速部署 Kubernetes 集群。二进制方式需要手工将所有的组件安装,非常的复杂,所以一般优选kubeadm方式----此处选择kubeadm第一步:环境准备【所有节点通用:master和worker都要进行】主机名主机ip说
一、Kubernetes(K8S)简介
1、Kubernetes (K8S) 是什么
它是一个为 容器化应用提供集群部署和管理的开源工具,由 Google 开发。Kubernetes 这个名字源于希腊语,意为“舵手”或“飞行员”。k8s 这个缩写是因为 k 和 s 之间有八个字符的关系。 Google 在 2014年开源了 Kubernetes 项目
主要特性:
高可用【不容易整体崩溃】,不宕机,自动灾难恢复灰度更新,不影响业务正常运转一键回滚到历史版本方便的伸缩扩展(应用伸缩,机器加减)、提供负载均衡【将压力平均分配给集群下所有服务器,这就是负载均衡----> 大家有福同享有难同当】有一个完善的生态【插件齐全 】
2、什么时候需要 Kubernetes
当你的应用只是跑在一台机器,直接一个 docker 就够了,方便轻松;
当你的应用需要跑在 3,4 台机器上,你依旧可以每台机器单独配置运行环境 + 负载均衡器;
当你应用访问数不断增加,机器逐渐增加到十几台、上百台、上千台时,每次加机器、软件更新、版本回滚,都会变得非常麻烦、痛不欲生,再也不能好好的摸鱼了,人生浪费在那些没技术含量的重复性工作上。
这时候,Kubernetes 就可以一展身手了,让你轻松管理百万千万台机器的集群。“谈笑间,樯橹灰飞烟灭”,享受着一手掌控所有,年薪百万指日可待。Kubernetes 可以为你提供集中式的管理集群机器和应用,加机器、版本升级、版本回滚,那都是一个
命令就搞定的事,不停机的灰度更新,确保高可用、高性能、高扩展。
3、 K8s 功能
(1)自动装箱
基于容器对应用运行环境的资源配置要求,自动部署应用容器
(2)自我修复(自愈能力)
当容器失败时,会对容器进行重启 ,当所部署的 Node 节点有问题时,会对容器进行重新部署和重新调
度 ,当容器未通过监控检查时,会关闭此容器直到容器正常运行时,才会对外提供服务
(3)水平扩展
通过简单的命令、用户 UI 界面或基于 CPU 等资源使用情况,对应用容器进行规模扩大或规模剪裁
(4)服务发现
用户不需使用额外的服务发现机制,就能够基于Kubernetes 自身能力实现服务发现和负载均衡
(5)滚动更新
可以根据应用的变化,对应用容器运行的应用,进行一次性或批量式更新
(6)版本回退
可以根据应用部署情况,对应用容器运行的应用,进行历史版本即时回退
(7)密钥和配置管理
在不需要重新构建镜像的情况下,可以部署和更新密钥和应用配置,类似热部署。
(8)存储编排
自动实现存储系统挂载及应用,特别对有状态应用实现数据持久化非常重要 存储系统可以来自于本地目
录、网络存储(NFS、Gluster、Ceph 等)、公共云存储服务
(9)批处理
提供一次性任务,定时任务;满足批量数据处理和分析的场景
4、Kubernetes 集群架构
master node 【主节点】
Master Node 是k8s 集群控制节点,对集群进行调度管理,接受集群外用户对集群操作请求;-----------
不负责运行程序,只是负责调度控制
Master Node 包含组件:
----- API Server:各组件通过 api server 获取、更新集群的状态,只有 api server 能直接访问 etcd。
----- ClusterState Store(ETCD 数据库):Etcd用于保存集群所有的网络配置和对象的状态信息
----- Scheduler: 调度器,负责计算 Pod 应该调度到哪个 Worker 上
----- Controller MangerServer: 控制器管理器,负责运行各种各样的控制器,通常一种资源类型会对
应至少一个控制器,比如 Deployment 控制器;
worker node 【工作节点】
工作节点,可以是虚拟机或物理计算机,任务都在这里跑【部署的程序都在这上面】,机器性能需要好
点;通常都有很多个,可以不断加机器扩大集群;每个工作节点由主节点管理--------------------工作节点才
是真正干活的,我们部署的程序都在这个上面
Worker Node 包含组件:
----- kubelet:注册 node,管理节点上运行的 Pod
----- kube proxy: 负责维护节点上的网络规则,以转发流量
----- ContainerRuntime: 提供容器运行环境,是负责运行容器的软件
重要概念 Pod
Pod翻译为豆荚,K8S 调度、管理的最小单位,一个 Pod 可以包含一个或多个容器,每个 Pod 有自己
的虚拟IP。一个工作节点可以有多个 pod,主节点会考量负载自动调度 pod 到哪个节点运行。
二、安装 Kubernetes 集群
1、安装方式介绍
(1)、裸机搭建
裸机搭建一般有两种方式“kubeadm 方式”和”二进制方式“,Kubeadm 是一个 K8s 部署工具,提供
kubeadm init 和 kubeadm join,用于快速部署 Kubernetes 集群。二进制方式需要手工将所有的组件
安装,非常的复杂,所以一般优选kubeadm方式----此处选择kubeadm
第一步:环境准备【所有节点通用:master和worker都要进行】
主机名 | 主机ip | 说明 |
---|---|---|
k8s-master | 192.168.174.140 | master节点 |
k8s-node | 192.168.174.141 | node节点 |
<1>、【所有节点】设置主机名
#分别设置主机名 hostnamectl set-hostname k8s-1 --(主机名) #分别修改host文件 vi /etc/hosts ------- 里面设置各个"节点的id 对应的hostname主机名"
==更改完节点后重启虚拟机==
<2>、【所有节点】关闭干扰服务
需要关闭所有节点的防火墙,selinux,dnsmasq,swap,NetworkManager
#关闭防火墙,并取消开机启动 systemctl disable --now firewalld #关闭dnsmasq,并取消开机启动 systemctl disable --now dnsmasq #关闭NetworkManager,并取消开机启动 --- 注意,如果是centos8就不用关闭了,此处用centos7,需要关闭 systemctl disable --now NetworkManager #关闭selinux setenforce 0 sed -i 's/enforcing/disabled/' /etc/selinux/config #临时停止关闭swap swapoff -a && sysctl -w vm.swappiness=0 #永久关闭,为了以后重启都不会开启了 vi /etc/fstab 注释掉/dev/mapper/centos-swap swap swap defaults 0 0 或者 UUID=bdb8b148-c906-4108-bd85-0391f977feef swap swap defaults 0 0
<3>、【所有节点】同步时钟
如果每个节点时间不同步相互之间无法连接
#安装软件ntpdate yum -y install ntpdate #同步时区 ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime echo 'Asiz/Shanghai' >/etc/timezone #设置时间服务器【此处用aliyun】 ntpdate time2.aliyun.com #设置自动同步时间 crontab -e #开启任务设置,将下面的内容设置进去 --------下面是设置的内容【和vi操作一样】------- 0 */5 * * * ntpdate time2.aliyun.com #每5分钟同步一次时间,然后wq保存,可以通过crontab-l查看已配置的定时任务
<4>、【所有节点】将桥接的 IPv4 流量传递到 iptables 链
桥接的 IPv4 流量传递到 iptables 链在 Kubernetes 中的作用主要包括以下方面:
-
网络策略实现: Kubernetes 中的网络策略允许你定义 Pod 之间和 Pod 与外部通信的规则。通过将桥接的 IPv4 流量传递到 iptables 链,可以在 iptables 规则中定义网络策略,例如允许或拒绝特定 Pod 之间的通信、限制源/目标 IP、端口或协议等。
-
服务代理和负载均衡: iptables 在 Kubernetes 中用于服务代理和负载均衡。Kubernetes Service 抽象背后是 iptables 规则,它们使得从集群内部访问服务更为便捷,同时提供负载均衡功能。
-
流量管理和路由: 通过 iptables 可以对进出 Pod 的流量进行管理和路由。这包括在节点之间路由流量、NAT 转发、SNAT、DNAT 等操作,确保流量按照预期的方式在集群内外传输。
-
网络隔离和安全性: iptables 允许在 Kubernetes 中实现网络隔离和安全策略。通过定义适当的规则,可以限制 Pod 之间的通信,增强安全性并确保网络的完整性。
在 Kubernetes 中,CNI 插件负责配置网络和实现网络策略。这些插件可以使用 iptables 或其他技术来管理容器间通信。通过将桥接的 IPv4 流量传递到 iptables 链,Kubernetes 可以利用 iptables 提供的丰富功能来管理容器间的流量、实施网络策略并确保网络的可用性和安全性。
cat > /etc/sysctl.d/k8s.conf << EOF net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF # 执行生效 sysctl --system
< 5>、所有节点安装 Docker/kubeadm/kubelet
注意docker版本和安装k8s有对应关系,此处用的docker-ce-18.06.1
在GitHub可以查看所有Kubernetets版本信息: https://github.com/kubernetes/kubernetes/releases
Docker安裝
yum install -y wget wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo yum -y install docker-ce-18.06.1.ce-3.el7 systemctl enable docker systemctl start docker docker --version
给docker添加阿里云源,这样下载会快
#写入镜像加速 sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://5n5qtc03.mirror.aliyuncs.com"] } EOF #重启docker守护进程 systemctl daemon-reload #重启docker服务 systemctl restart docker
添加 yum 源,用于安装kubernetes
cat > /etc/yum.repos.d/kubernetes.repo << EOF [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=0 repo_gpgcheck=0 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF
安装 kubeadm,kubelet 和 kubectl
yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0 #下载kubeadm,kubelet和 kubectl,版本1.18.0 systemctl enable kubelet #开机自动启动kubelet
第二步:Master节点安装
<1>、kubeadm初始化master节点
kubeadm init \ --apiserver-advertise-address=【master节点ip】 \ --image-repository registry.aliyuncs.com/google_containers \ --kubernetes-version v1.18.0【版本和上面安装kubeadm,kubelet,kubectl一致】 \ --service-cidr=10.96.0.0/12 \ --pod-network-cidr=10.244.0.0/16 示例: kubeadm init \ --apiserver-advertise-address=192.168.174.140 \ --image-repository registry.aliyuncs.com/google_containers \ --kubernetes-version v1.18.0 \ --service-cidr=10.96.0.0/12 \ --pod-network-cidr=10.244.0.0/16
注意:kubeadm 初始化完毕后,最后生成一句“kubeadm join” 一定要保存好这个内容,因为这是用
于向k8s中加入节点的命令
<2>、使用 kubectl 工具
kubectl 工具可以查看集群信息
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config ------------上面在master节点中只要运行一次即可----------- kubectl get nodes --- 查看node情况
<3>、安装 Pod 网络插件
vi kube-flannel.yml 注意:kube-flannel和安装k8s版本有关联的,如果更改k8s版本了需要去网上自己找可以用kube-flannel配置
具体内容看附件
安装完成后
kubectl apply -f kube-flannel.yml --- 给kubectl apply设置一个yml源 kubectl get pods -n kube-system --- 查看pod的运行情况
#再次查看node节点信息 kubectl get nodes
补充:kube-flannel.yml如果有问题,需要先卸载后,更改里面的内容,再重新执行
kubectl apply -f kube-flannel.yml --- 运行 kube-flannel.yml 注意:kubectl apply -f 会从kube-flannel.yml读取资源配置【类似docker-compose】,会先通过 网络下载镜像,所以必须联网,有时候可能网络问题导致无法成功,检查一下网络 kubectl delete -f kube-flannel.yml --- 卸载 kube-flannel.yml
第三步:Node节点安装
使用第二步、<2>中的那句“kubeadm join” 就可以将node节点加载到集群中
第四步:测试集群【master进行】
在 Kubernetes 集群中创建一个 pod【tomcat】,验证是否正常运行:
kubectl create deployment tomcat --image=tomcat:8.5.23 --- 拉取tomcat kubectl get pod --- 查看pod拉取情况 kubectl expose deployment tomcat --port=8080 --type=NodePort --- 开启一个服务,暴露8080端口 kubectl get pod,svc --- 查看服务情况
更多推荐
所有评论(0)