当前位置:网站首页>Kubernetes快速实战与核心原理剖析
Kubernetes快速实战与核心原理剖析
2022-06-21 12:41:00 【51CTO】
 Kubernetes快速实战与核心原理剖析_nginx](/img/47/995f4477d0fda31daf31db35ea1e3e.jpg)
K8S 概览
1.1 K8S 是什么?
K8S官网文档:https://kubernetes.io/zh/docs/home/ K8S 是Kubernetes的全称,源于希腊语,意为“舵手”或“飞行员”,官方称其是:用于自动部署、扩展和管理“容器化(containerized)应用程序”的开源系统。翻译成大白话就是:“K8S 是负责自动化运维管理多个跨机器 Docker 程序的 集群”。
1.2 K8S核心特性
- 服务发现与负载均衡:无需修改你的应用程序即可使用陌生的服务发现机制。
- 存储编排:自动挂载所选存储系统,包括本地存储。
- Secret和配置管理:部署更新Secrets和应用程序的配置时不必重新构建容器镜像,且不必将软件堆栈配置中的秘密信息暴露出来。
- 批量执行:除了服务之外,Kubernetes还可以管理你的批处理和CI工作负载,在期望时替换掉失效的容器。
- 水平扩缩:使用一个简单的命令、一个UI或基于CPU使用情况自动对应用程序进行扩缩。
- 自动化上线和回滚:Kubernetes会分步骤地将针对应用或其配置的更改上线,同时监视应用程序运行状况以确
- 保你不会同时终止所有实例。
- 自动装箱:根据资源需求和其他约束自动放置容器,同时避免影响可用性。
- 自我修复:重新启动失败的容器,在节点死亡时替换并重新调度容器,杀死不响应用户定义的健康检查的容器。
1.3 K8S集群安装
搭建K8S集群,准备三台2核4G的虚拟机(内存至少2G以上),操作系统选择用centos 7以上版本,先在三台机器上装好docker(安装参考docker课程 Docker详解与部署微服务实战:
在三台机器上都执行如下命令操作:
1、关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
2、关闭 selinux
sed ‐i 's/enforcing/disabled/' /etc/selinux/config # 永久关闭
setenforce 0 # 临时关闭
3、关闭 swap
swapoff ‐a # 临时关闭
vim /etc/fstab # 永久关闭
#注释掉swap这行
# /dev/mapper/centos‐swap swap swap defaults 0 0
systemctl reboot #重启生效
free ‐m #查看下swap交换区是否都为0,如果都为0则swap关闭成功
4、给三台机器分别设置主机名
hostnamectl set‐hostname <hostname>
第一台:k8s‐master
第二台:k8s‐node1
第三台:k8s‐node2
5、在 k8s‐master机器添加hosts,执行如下命令,ip需要修改成你自己机器的ip
cat >> /etc/hosts << EOF
192.168.65.160 k8s‐master
192.168.65.203 k8s‐node1
192.168.65.210 k8s‐node2
EOF
6、将桥接的IPv4流量传递到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 # 生效
7、设置时间同步
yum install ntpdate ‐y
ntpdate time.windows.com
8、添加k8s yum源
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
9、如果之前安装过k8s,先卸载旧版本
yum remove ‐y kubelet kubeadm kubectl
10、查看可以安装的版本
yum list kubelet ‐‐showduplicates | sort ‐r
11、安装kubelet、kubeadm、kubectl 指定版本,我们使用kubeadm方式安装k8s集群
yum install ‐y kubelet‐1.18.0 kubeadm‐1.18.0 kubectl‐1.18.0
12、开机启动kubelet
systemctl enable kubelet
systemctl start kubelet
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
- 28.
- 29.
- 30.
- 31.
- 32.
- 33.
- 34.
- 35.
- 36.
- 37.
- 38.
- 39.
- 40.
- 41.
- 42.
- 43.
- 44.
- 45.
- 46.
- 47.
- 48.
- 49.
- 50.
- 51.
- 52.
- 53.
- 54.
- 55.
- 56.
- 57.
- 58.
- 59.
- 60.
- 61.
- 62.
- 63.
- 64.
- 65.
在k8s-master机器上执行初始化操作(里面的第一个ip地址就是k8s-master机器的ip,改成你自己机器的,后面两个ip网段不用动)
执行完后结果如下图: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rHBPkaiM-1655448910946)(https://cdn.itjava.top/halo/image-1652951083768.png)]
 Kubernetes快速实战与核心原理剖析_nginx_02](/img/98/e36e3d0ed3bc0d4641cf7280603286.jpg)
在k8s-master机器上执行如下命令:
#配置使用 kubectl 命令工具(类似docker这个命令),执行上图第二个红框里的命令
mkdir ‐p $HOME/.kube
sudo cp ‐i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id ‐u):$(id ‐g) $HOME/.kube/config
#查看kubectl是否能正常使用
kubectl get nodes
#安装 Pod 网络插件
kubectl apply ‐f https://docs.projectcalico.org/manifests/calico.yaml
# 如果上面这个calico网络插件安装不成功可以试下下面这个
# kubectl apply ‐f
https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kubeflannel.yml
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
在所有k8s node机器执行上图第三个红框里的命令
在k8s-master机器执行查看节点命令
 Kubernetes快速实战与核心原理剖析_docker_03](/img/9a/0cb6d935387c057d87587eae2ddb8a.jpg)
刚刚安装的三个k8s节点都已经准备就绪,大功告成!
补充:如果node节点添加进集群失败,可以删除节点重新添加要删除 k8snode1
这个节点,首先在 master 节点上依次执行以下两个命令
执行后通过 kubectl get node 命令可以看到 k8snode1已被成功删除 接着在 k8snode1这个 Node 节点上执行如下命令,这样该节点即完全从 k8s 集群中脱离开来,之后就可以重新执行命令添加到集群
用K8S部署Nginx 在k8s-master机器上执行
 Kubernetes快速实战与核心原理剖析_nginx_04](/img/02/75f4583841690c09e03f661f2fc0d7.jpg)
访问Nginx地址: http://任意节点的ip:图中Nginx的对外映射端口,http://192.168.65.203:30433
 Kubernetes快速实战与核心原理剖析_nginx_05](/img/98/ed9d6372b1e76ad87a5f6205879427.jpg)
1.4 K8S 核心架构原理
我们已经知道了 K8S 的核心功能:自动化运维管理多个容器化程序。那么 K8S 怎么做到的呢?这里,我们从宏观架构上来学习 K8S 的设计思想。首先看下图:
 Kubernetes快速实战与核心原理剖析_nginx_06](/img/0f/1db331fc904e79bf216ef3bb74c629.jpg)
K8S 是属于主从设备模型(Master-Slave 架构),即有 Master 节点负责核心的调度、管理和运维,Slave 节点则执行用户的程序。但是在 K8S 中,主节点一般被称为Master Node 或者 Head Node,而从节点则被称为Worker Node 或者Node。 注意:Master Node 和 Worker Node 是分别安装了 K8S 的 Master 和 Woker 组件的实体服务器,每个 Node 都对应 了一台实体服务器(虽然 Master Node 可以和其中一个 Worker Node 安装在同一台服务器,但是建议 Master Node 单 独部署),所有 Master Node 和 Worker Node 组成了 K8S 集群,同一个集群可能存在多个 Master Node 和 WorkerNode。 首先来看Master Node都有哪些组件:
- API Server。K8S 的请求入口服务。API Server 负责接收 K8S 所有请求(来自 UI 界面或者 CLI 命令行工具),然后,API Server 根据用户的具体请求,去通知其他组件干活。
- Scheduler。K8S 所有 Worker Node 的调度器。当用户要部署服务时,Scheduler 会选择最合适的 WorkerNode(服务器)来部署。
- Controller Manager。K8S 所有 Worker Node 的监控器。Controller Manager 有很多具体的Controller, Node Controller、Service Controller、Volume Controller 等。Controller 负责监控和调整在Worker Node 上部署的服务的状态,比如用户要求 A 服务部署 2 个副本,那么当其中一个服务挂了的时候,Controller 会马上调整,让 Scheduler 再选择一个 Worker Node 重新部署服务。
- etcd。K8S 的存储服务。etcd 存储了 K8S 的关键配置和用户配置,K8S 中仅 API Server 才具备读写权限,其他组件必须通过 API Server 的接口才能读写数据。
接着来看Worker Node的组件:
- Kubelet。Worker Node 的监视器,以及与 Master Node 的通讯器。Kubelet 是 Master Node 安插在Worker Node 上的“眼线”,它会定期向 Master Node 汇报自己 Node 上运行的服务的状态,并接受来自Master Node 的指示采取调整措施。负责控制所有容器的启动停止,保证节点工作正常。
- Kube-Proxy。K8S 的网络代理。Kube-Proxy 负责 Node 在 K8S 的网络通讯、以及对外部网络流量的负载均衡。
- Container Runtime。Worker Node 的运行环境。即安装了容器化所需的软件环境确保容器化程序能够跑起来,比如 Docker Engine运行环境。
边栏推荐
- Educoder 表格标签-表格基本结构
- Educator web exercise - creating a text area
- 漫谈公网网络延迟
- PostgreSQL logical storage structure
- centos7 部署mysql 环境
- Hot information of Tami dog: Xiamen property right trading center creates its first time again!
- 卷积神经网络“卷积”的深层理解
- Educoder Web练习题---对表单元素分组
- Educoder Web练习题---创建文本区域
- vmware12虚拟机打开报错“\\.\Global\vmx86”: 系统找不到指定的文件。
猜你喜欢

《预训练周刊》第50期:无解码变换器、神经提示搜索、梯度空间降维

塔米狗 热门资讯:厦门产权交易中心再创第一次!

深度学习实战(十):使用 PyTorch 进行 3D 医学图像分割
![[Anxin cup 2019]easy_ web-1](/img/1d/f164c220f6c8e98b981ef79b0e96bc.png)
[Anxin cup 2019]easy_ web-1

Five (seven) principles - systematic learning III

爱可可AI前沿推介(6.21)

centos7 部署mysql 环境

Generalized Focal Loss: Learning Qualified and Distributed Bounding Boxes for Dense Object Detection

Tami dog sharing: the way of property right transaction and the significance of data-based property right transaction market

小程序直播互动功能运行在App里?
随机推荐
Educoder Web练习题---表单的结构
Educator web exercise - grouping form elements
Apache shardingsphere 5.1.2 release | new driving API + cloud native deployment to create a high-performance data gateway
塔米狗项目解读:济宁华源项目管理有限公司34%股权转让
Router telnet and ACL configuration
Not only zero:bmtrain technology principle analysis
修修补补一时爽,果断重构有担当——聊聊CRM分布式缓存优化
Generalized Focal Loss: Learning Qualified and Distributed Bounding Boxes for Dense Object Detection
塔米狗 热门资讯:厦门产权交易中心再创第一次!
Educoder Web练习题---结构元素
UVA1203 Argus
爱可可AI前沿推介(6.21)
Interpretation of tamigou project: 34% equity transfer of Jining Huayuan Project Management Co., Ltd
[安洵杯 2019]easy_web-1
【深入理解TcaplusDB技术】TcaplusDB构造数据
2022年中国手机银行年度专题分析
Educator web exercise - create a drop-down list
如何手动删除浮动ip
Nanjing University static program analyses -- Introduction learning notes
PingCAP 入选 2022 Gartner 云数据库“客户之声”,获评“卓越表现者”最高分