云安全 之 Kubernetes (K8S) 如何部署
2022-12-22 18:42:15 Author: Ms08067安全实验室(查看原文) 阅读量:21 收藏

文章来源 | 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.repo

[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 <daemon.json

{

  "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

—  实验室旗下直播培训课程  —


来和20000+位同学加入MS08067一起学习吧!


文章来源: http://mp.weixin.qq.com/s?__biz=MzU1NjgzOTAyMg==&mid=2247505523&idx=1&sn=bc1dc4ddd5a83c95e2011157c67ed133&chksm=fc3c6f72cb4be664ac8c8eb8067cdd6bbae1e448e1cf9cd246e353d6fe8c589714d90c15e9ea#rd
如有侵权请联系:admin#unsafe.sh