文章来源 | MS08067 安全实验室
本文作者:Taoing(Web安全攻防讲师)
Kubernetes (K8S) 是什么
它是一个为容器化应用提供集群部署和管理的开源工具,由 Google 开发。Kubernetes这个名字源于希腊语,意为“舵手”或“飞行员”。k8s 这个缩写是因为k和s之间有八个字符的关系。Google在2014年开源了Kubernetes项目。
主要特性:
高可用,不宕机,自动灾难恢复
灰度更新,不影响业务正常运转
一键回滚到历史版本
方便的伸缩扩展(应用伸缩,机器加减)、提供负载均衡
有一个完善的生态
学习课程前提:
熟悉Docker的基本使用,如果还不了解Docker,先看视频Docker快速上手
熟悉Linux操作系统
不同的应用部署方案
传统部署方式
用直接在物理机上部署,机器资源分配不好控制,出现Bug时,可能机器的大部分资源被某个应用占用,导致其他应用无法正常运行,无法做到应用隔离。
虚拟机部署
在单个物理机上运行多个虚拟机,每个虚拟机都是完整独立的系统,性能损耗大。
容器部署
所有容器共享主机的系统,轻量级的虚拟机,性能损耗小,资源隔离,CPU和内存可按需分配
什么时候需要 Kubernetes
当你的应用只是跑在一台机器,直接一个docker + docker-compose就够了,方便轻松;当你的应用需要跑在 3,4 台机器上,你依旧可以每台机器单独配置运行环境 + 负载均衡器;当你应用访问数不断增加,机器逐渐增加到十几台、上百台、上千台时,每次加机器、软件更新、版本回滚,都会变得非常麻烦、痛不欲生,再也不能好好的摸鱼了,人生浪费在那些没技术含量的重复性工作上。
这时候,Kubernetes就可以一展身手了,让你轻松管理百万千万台机器的集群。“谈笑间,樯橹灰飞烟灭”,享受着一手掌控所有,年薪百万指日可待。
Kubernates可以为你提供集中式的管理集群机器和应用,加机器、版本升级、版本回滚,那都是一个命令就搞定的事,不停机的灰度更新,确保高可用、高性能、高扩展。
1. K8S(Kubernetes)服务器准备
准备 云服务器,新建三台服务器
这里我使用 阿里云,ECS按量付费机器进行搭建环境学习。https://www.aliyun.com/product/ecs
命名服务器
master:172.24.166.11
node1:172.24.166.10
node2:172.24.166.9
2. 环境安装
设置主机
master:172.24.166.11
hostnamectl set-hostname master //主机名设置为 master
node1:172.24.166.10
hostnamectl set-hostname node1 //主机名设置为 node1
node2:172.24.166.9
hostnamectl set-hostname node2 //主机名设置为 node2
修改hosts文件
vim /etc/hosts
172.24.166.11 master
172.24.166.10 node1
172.24.166.9 node2
ping测试:master机器: ping node1
所有节点关闭SELinux和防火墙
setenforce 0
sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
systemctl stop firewalld
systemctl disable firewalld
所有节点添加安装源
# 添加 k8s 安装源
cat <
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
EOF
mv kubernetes.repo /etc/yum.repos.d/
# 添加 Docker 安装源
yum -y install yum-utils
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装所需组件(所有节点)
yum install -y kubelet kubeadm kubectl docker-ce
启动 kubelet、docker,并设置开机启动(所有节点)
systemctl enable kubelet
systemctl start kubelet
systemctl enable docker
systemctl start docker
修改 docker 配置(所有节点)
# kubernetes 官方推荐 docker 等使用 systemd 作为 cgroupdriver,否则 kubelet 启动不了
cat <
{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": ["https://ud6340vz.mirror.aliyuncs.com"]
}
EOF
mv daemon.json /etc/docker/
# 重启生效
systemctl daemon-reload
systemctl restart docker
在主节点使用 kubeadm 初始化集群(仅在主节点跑)
# 初始化集群控制台 Control plane
# 失败了可以用 kubeadm reset 重置
kubeadm init --image-repository=registry.aliyuncs.com/google_containers
# 记得把 kubeadm join xxx 保存起来
# 忘记了重新获取:kubeadm token create --print-join-command
# 复制授权文件,以便 kubectl 可以有权限访问集群
# 如果你其他节点需要访问集群,需要从主节点复制这个文件过去其他节点
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
# 在其他机器上创建 ~/.kube/config 文件也能通过 kubectl 访问到集群
如下图所示,已经初始化完成,并输出了命令用于吧node节点加入到master。加入时记得把"\"去掉
在master上使用kubectl get node查看是否加入成功,如下图表示成功。但是发现状态(STATUS)为 没准备好(NotReady)。这时需要去安装网络插件,否则 node 是 NotReady 状态(主节点跑)
在master上安装网络插件,否则 node 是 NotReady 状态(主节点跑)安装后稍等会状态(STATUS)会变为Ready(准备好)
# 很有可能国内网络访问不到这个资源,你可以网上找找国内的源安装 flannel
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
到此为止已经部署好K8S
参考链接🔗
https://k8s.easydoc.net/docs/dRiQjyTY/28366845/6GiNOzyZ/9EX8Cp45
https://mp.weixin.qq.com/s/bhSLSrIpyYqB9I6T55GBew
https://www.bilibili.com/video/BV1Tg411P7EB?p=2
— 实验室旗下直播培训课程 —