30分钟从零玩转部署docker+k8s集群

一、容器编排工具
docker machine 
docker compose //单节点
docker swarm  // docker集群编排,类似k8s,没有k8s强大,
                           包含了docker service 和 docker stack
kubernetes  / k8s
mesos  + marathon 
//以上都是容器编排的工具,现在比较流行的就是 k8s 和 docker swarm
二、 PaaS 平台,基于k8s编排的可视化平台 / 集群管理平台
OpenShift
kubsphere //国内用一用,青云出的,国际上用的人少
Rancher
三、认识 kubernetes
k8s最少能支持节点数为5000个以上
原先能有效管理1000,现在能有效管理150000
k8s的核心功能:
自动装箱
自我修复 ( 自愈能力 )
水平扩展
服务发现
滚动更新
版本回退
密钥和配置管理
存储编排
四、 kubernetes 架构

master节点的组件介绍

master节点是集群管理中心,它的组件可以在集群内任意节点运行,但是

为了方便管理所以会在一台主机上运行Master所有组件,并且不在此主机

上运行用户容器,当然也可以在master节点上跑容器,设置容忍标签;
Master 组件包括:
kubescheduler -监视新创建没有分配到Node的Pod,为 Pod 选择一个 Node

 kube-apiserver   用于暴露kubernetes API,任何的资源请求/调用操作都是通过kube-apiserver提供的接口进行

ETCD  kubernetes 提供默认的存储系统,保存所有集群数据,使用时需要
etcd 数据提供备份计划
kube-controller-manager   运行管理控制器,它们是集群中处理常规任务的后台线程
控制器包括:
节点 (Node) 控制器
副本 (Replication) 控制器:负责维护系统中每个副本中的 pod
端点 (Endpoints) 控制器:填充 Endpoints 对象 ( 即连接 service&pods)
Service Account Token 控制器:为新的 NameSpaces 创建默认帐 户访问API Token
Node 节点组件介绍
kubelet    1.负责维护容器的生命周期( 创建 pod ,销毁 pod) ,同时也负责  
                2. Volume(CVI)和网络(CNI) 的管理
kube-proxy 1.通过在主机上维护网络规则并执行连接转发来实现 service(Iptables/Ipvs)  
                   2.随时与API通信,把Service Pod 改变提交给 API (不存储在 Master本地,需要保存至共享存储上),保存至 etcd (可做高可用 集群)中,负责service 实现,从内部 pod service 和从外部 node 到service 访问。
                3.docker容器运行时(Container Runtime)
                 4. 负责镜像管理以及Pod和容器的真正运行
               5.  支持docker/Rkt/Pouch/Kata等多种运行时 , 但我们这里只使用 docker
Add-ons 介绍 直接看图就好
五、 kubernetes 核心概念
pod 、service、Label 、Label Selector 、Scheduler 、Replication Controllers、Replication Controller Manager.
pod的调度流程:
六、网络插件选择
主流的网络插件为:flannel、calico、canel、contiv、open vSwitch、nuage、Romana、weave net
七、 kubeadm 部署 kubernetes
准备三台服务器,

集群 一般都是为单数,最少3台起步;
坑已经排干净了,照着做肯定能搭建好

1. 准备3台服务器
vi /etc/hosts
192.168.0.11 master 
192.168.0.12 node1 
192.168.122.13 node2

2. 关闭所有的selinux 和 防火墙
systemctl stop firewalld
systemctl disable firewall
systemctl stop firewalld
systemctl disable firewall

3. 安装iptables 并启动
yum install iptables-services -y
systemctl restart iptables
systemctl enable iptables

iptables -F
iptables -F -t nat
iptables -F -t mangle
iptables -F -t raw
iptables -L
service iptables save

4. 所有节点 时间同步 ntp

5. 所有节点准备yum源(在centos默认源的基础上再加上以下两个yum源)
vim /etc/yum.repos.d/kubernetes.repo //复制下面的配置
[k8s] name=k8s 
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/ku-bernetes-el7-x86_64/ 
enabled=1 
gpgcheck=0

6. wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

7. 关闭所有节点的swap 必须关闭
swapoff -a
vim /etc/fstab
将带有 swap defaults 0 0  那一行注释掉

8. vi /etc/sysctl.d/k8s.conf
net.ipv4.ip_forward = 1
vm.swappiness = 0 
net.bridge.bridge-nf-call-ip6tables = 1 
net.bridge.bridge-nf-call-iptables = 1
保存退出
sysctl -p /etc/sysctl.d/k8s.conf
modprobe br_netfilter
lsmod |grep br_netfilter

9. 所有节点设置kube-proxy开启ipvs的前置条件
vi /etc/sysconfig/modules/ipvs.modules
modprobe ip_vs 
modprobe ip_vs_rr 
modprobe ip_vs_wrr 
modprobe ip_vs_sh 
modprobe nf_conntrack_ipv4
保存退出
chmod 755 /etc/sysconfig/modules/ipvs.modules
sh /etc/sysconfig/modules/ipvs.modules
lsmod |egrep 'ip_vs|nf_conntrack'

10. 所有节点安装软件 ,必须安装docker-ce 不能安装老版本的docker
yum list docker-ce.x86_64 --showduplicates | sort -r
yum install docker-ce-18.09.8-3.el7 docker-ce-cli-18.09.8-3.el7 --setopt=obsoletes=0 -y

docker -vdocker -v
systemctl start docker
systemctl enable docker

11.  所有节点配置加速器和将cgroupdrivier改为systemd,并重启docker服务
vim /etc/docker/daemon.json

    "registry-mirrors": ["https://42h8kzrh.mirror.aliyuncs.com"], 
    "exec-opts": ["native.cgroupdriver=systemd"] 
}
保存退出
systemctl restart docker

12. 所有节点安装kubelet kubeadm kubectl并启动
yum install kubelet-1.15.1-0 kubeadm-1.15.1-0 kubectl-1.15.1-0 -y
systemctl enable kubelet

13. kubeadm 初始化,在master节点操作,其他节点不操作,此项操作会下载镜像,时间会长一些
kubeadm init --kubernetes-version=1.15.1 --apiserver-advertise-address=192.168.122.11 --image-repository registry.aliyuncs.com/google_containers --service-cidr=10.2.0.0/16 --pod-network-cidr=10.3.0.0/16
// cidr是虚拟出来的地址段,用于k8s内网通讯
//安装完以后 在最后几段会有一个
// Your Kubernetes control-plane has initialized successfully! 
// 看到这个还没完,还需要复制一个这个信息,是master节点对node节点开放注册的一个token
// 看到有一行命令是 kubeadmin join 192.168.xx你的内网IP  --token 这句话 全都提前复制下来

14. 验证
docker images
//出现很多镜像代表OK

15. 启动集群,在master节点操作
systemctl status kubelet.service
vim /etc/profile
//在最后一行加入
export KUBECONFIG=/etc/kubernetes/admin.conf
//保存退出
source /etc/profile
// 查看集群状态
kubectl get cs
// 查看集群的各个node节点
kubectl get node

16. 创建flannel网络
mkdir /home/k8s
cd /home/k8s/
curl -O https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
//应用flannel
kubectl apply -f kube-flannel.yml
// 确认所有Pod都是runing状态
kubectl get pods -n kube-system
//如果初始化错误,清理一下再初始化,清理命令为:
kubeadm reset
ifconfig cni0 down
ip link delete cni0
ifconfig flannel.1 down
ip link delete flannel.1
rm -rf /var/lib/cni/

17. 验证master OK
kubectl get nodes
//看到下面的输出代表正常
// master Ready master 66m v1.15.1 

18. 加入其它节点
// 在node1和node2上加入到 master集群,执行本文章的第13条最后一个注释,把kubeadm join的命令复制出来 执行
kubeadm join 内网IP:6443 --token cyoesa.wyuw7x30j0hqu7sr --discovery-token-ca-ce
// 上面的命令是加入一个work节点到集群,如果是k8s多主多从架构,加入master角色到集群,则在命令后加:--experimental-control-plane
//验证是否集群部署成功, 在Master节点执行
kubectl get nodes
//看到输出 都是ready状态即可
master Ready master 88m v1.15.1 
node1 Ready <none> 3m42s v1.15.1 
node2 Ready <none> 101s v1.15.1

19. 假如移除节点2的做法
// 在master节点执行
kubectl drain node2 --delete-local-data --force --ignore-daemonsets
kubectl delete node node2
// 在Node2节点上执行
kubeadm reset
ifconfig cni0 down
ip link delete cni0
ifconfig flannel.1 down
ip link delete flannel.1
rm -rf /var/lib/cni/
// 在node1节点上执行
kubectl delete node node2

 

 

Docker和Kubernetes(k8s)都是当今非常热门的技术,用于容器化应用程序的部署和管理。 Docker是一个开源项目,它可以将应用程序及其依赖项打包到一个可移植的容器中,并在不同的环境中进行部署Docker容器非常轻量化和灵活,可以在不同的操作系统上运行,提供了一致的运行环境。Docker还可以通过镜像的方式进行快速部署和扩展,节省了部署和维护的时间和成本。 Kubernetes是一个用于容器编排和管理的开源平台。它可以自动化容器应用程序的部署、扩展和管理。Kubernetes提供了一种弹性和可扩展的方式来管理容器化应用程序,可以动态地调整容器的数量和配置。它还提供了监控、日志和故障恢复等功能,使得应用程序在集群中更加可靠和稳定。 在将应用程序部署到Kubernetes集群中时,首先需要将应用程序打包成Docker镜像。然后,使用Kubernetes的API或命令行工具来创建和配置一组Pod(一个或多个容器的组合)。Pod是Kubernetes的最小部署单位,它可以包含一个或多个容器,共享网络和存储资源。可以根据应用程序的需求定义Pod的资源限制和请求,并使用Kubernetes的调度器在集群中自动分配和调度Pod。 一旦Pod被创建,Kubernetes将根据指定的副本数量自动复制和扩展Pod。Kubernetes还提供了服务发现、负载均衡和网络隔离等功能,使得应用程序可以方便地与其他Pod和服务进行通信。 总而言之,通过使用Docker和Kubernetes的组合,我们可以实现高效、可扩展和可靠的容器化应用程序部署和管理。它们可以帮助我们更好地利用硬件资源,简化应用程序的部署过程,并提供高可用性和弹性。这对于现代化的云原生应用程序开发和运维来说是非常重要的。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值