本文参考 http://docs.kubernetes.org.cn/109.html 和 http://www.qfdmy.com/
简介
什么是Kubernees
Kubernees,简称k8s,ks是容器集群管理系统,是一个开源的平台,可以实现容器的自动化部署,自动扩缩容,维护等功能
特色
优势
快速部署应用
快速扩展应用
无缝对接新功能
节省资源,优化硬件资源的使用
特点
可移植: 支持公有云,私有云,混合云,多重云(multi-cloud)
可扩展: 模块化, 插件化, 可挂载, 可组合
自动化: 自动部署,自动重启,自动复制,自动伸缩/扩展
从传统到容器化部署
为什么要使用容器
传统应用部署和容器部署的区别
传统的应用部署
是通过插件或者脚本来安装应用,这样做的缺点是应用的运行、配置、管理、所有生存周期将与当前操作系统绑定,这样做并不利于应用的升级更新/回滚等操作,当然也可以通过创建虚机的方式来实现某些功能,但是虚拟机非常重,并不利于可移植性。
通过部署容器方式实现
沙箱机制,每个容器之间互相隔离,每个容器有自己的文件系统 ,容器之间进程不会相互影响,能区分计算资源。相对于虚拟机,容器能快速部署,由于容器与底层设施、机器文件系统解耦的,所以它能在不同云、不同版本操作系统间进行迁移
容器化部署的优势
- 快速创建/部署应用: 与虚拟机相比,容器镜像的创建更加容易。
- 持续开发、集成和部署: 提供可靠且频繁的容器镜像构建/部署,并使用快速和简单的回滚(由于镜像不可变性)。
- 开发和运行相分离: 在 build 或者 release 阶段创建容器镜像,使得应用和基础设施解耦。
- 开发,测试和生产环境一致性: 在本地或外网(生产环境)运行的一致性。
- 云平台或其他操作系统: 可以在 Ubuntu、RHEL、CoreOS、on-prem、Google Container Engine
或其它任何环境中运行。 - 分布式,弹性,微服务化: 应用程序分为更小的、独立的部件,可以动态部署和管理。
资源隔离 - 资源利用更高效
使用k8s能够做什么
- 多个进程(作为容器运行)协同工作。(Pod)
- 存储系统挂载
- Distributing secrets
- 应用健康检测
- 应用实例的复制
- Pod自动伸缩/扩展
- Naming and discovering
- 负载均衡
- 滚动更新
- 资源监控
- 日志访问
- 调试应用程序
- 提供认证和授权
这里要注意的是,k8s并部署传统的Paas系统,Kubernetes不限制支持应用的类型,不限制应用框架,不限制受支持的语言,满足1要素轻应用,不提供中间件,不部署源码不编译应用,不提供或授权一个全面的应用程序配置语言/系统,也不提供任何机器配置,维护,但是他允许用户选择自己的日志,监控,另外,Kubernetes不仅仅是一个“编排系统”;它消除了编排的需要。“编排”的定义是指执行一个预定的工作流:先执行A,之B,然C。相反,Kubernetes由一组独立的可组合控制进程组成。怎么样从A到C并不重要,达到目的就好。当然集中控制也是必不可少,方法更像排舞的过程。这使得系统更加易用、强大、弹性和可扩展。
使用乌班图部署 Kubernetes 集群
准备工作
关闭交互空间
swapoff -a
避免开机启动交换空间
# 注释 swap 开头的行
vi /etc/fstab
关闭防火墙
ufw disable
配置DNS
# 取消 DNS 行注释,并增加 DNS 配置如:114.114.114.114,修改后重启下计算机
vi /etc/systemd/resolved.conf
安装 Docker
前面有文章
在 /etc/docker/daemon.json 中写入如下内容(以下配置修改 cgroup 驱动为 systemd,满足 K8S 建议)
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"registry-mirrors": [
"https://k7da99jp.mirror.aliyuncs.com/",
"https://dockerhub.azk8s.cn",
"https://registry.docker-cn.com"
],
"storage-driver": "overlay2"
}
安装 Kubernetes 必备工具
安装三个 Kubernetes 必备工具,分别为 kubeadm,kubelet,kubectl
加粗样式
# 安装系统工具
apt-get update && apt-get install -y apt-transport-https
# 安装 GPG 证书
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
# 写入软件源;注意:我们用系统代号为 bionic,但目前阿里云不支持,所以沿用 16.04 的 xenial
cat << EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
# 安装
apt-get update && apt-get install -y kubelet kubeadm kubectl
同步时间
设置时区
dpkg-reconfigure tzdata
时间同步
# 安装 ntpdate
apt-get install ntpdate
# 设置系统时间与网络时间同步(cn.pool.ntp.org 位于中国的公共 NTP 服务器)
ntpdate cn.pool.ntp.org
# 将系统时间写入硬件时间
hwclock --systohc
修改 cloud.cfg
主要作用是防止重启后主机名还原
vi /etc/cloud/cloud.cfg
# 该配置默认为 false,修改为 true 即可
preserve_hostname: true
单独节点配置
编辑 vi /etc/netplan/50-cloud-init.yaml 配置文件,修改内容如下
network:
ethernets:
ens33:
addresses: [192.168.23.132/24]
gateway4: 192.168.23.2
nameservers:
addresses: [192.168.23.2]
version: 2
配置主机名
# 修改主机名
hostnamectl set-hostname kubernetes-master
# 配置 hosts
cat >> /etc/hosts << EOF
192.168.23.132 kubernetes-master
EOF
最后ping一下百度
ping www.baidu.com ,看看dns也没有配置失败