kubernetes(一)---kubeadm方式部署集群

kubernetes(一)—kubeadm方式部署集群

1.什么是kubernetes

官方中文文档:https://www.kubernetes.org.cn/docs

  • 它是一个全新的容器技术的分布式架构领先方案。Kubernetes(k8s)是Google开源的容器集群管理系统(谷歌内部:Borg)。在Docker技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能,提高了大规模容器集群管理的便捷性。
  • Kubernetes是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful)。Kubernetes提供了应用部署,规划,更新,维护的一种机制。
  • Kubernetes一个核心的特点就是能够自主的管理容器来保证云平台中的容器按照用户的期望状态运行着(比如用户想让apache一直运行,用户不需要关心怎么去做,Kubernetes会自动去监控,然后去重启,新建,总之,让apache一直提供服务),管理员可以加载一个微型服务,让规划器来找到合适的位置,同时,Kubernetes也系统提升工具以及人性化方面,让用户能够方便的部署自己的应用。
  • Kubernetes是一个完备的分布式系统支撑平台,具有完备的集群管理能力,多扩多层次的安全防护和准入机制、多租户应用支撑能力、透明的服务注册和发现机制、內建智能负载均衡器、强大的故障发现和自我修复能力、服务滚动升级和在线扩容能力、可扩展的资源自动调度机制以及多粒度的资源配额管理能力。同时Kubernetes提供完善的管理工具,涵盖了包括开发、部署测试、运维监控在内的各个环节。
  • 在集群管理方面,Kubernetes将集群中的机器划分为一个Master节点和一群工作节点Node。其中,在Master节点运行着集群管理相关的一组进程kube-apiserver、kube-controller-manager和kube-scheduler,这些进程实现了整个集群的资源管理、Pod调度、弹性伸缩、安全控制、系统监控和纠错等管理能力,并且都是全自动完成的。Node作为集群中的工作节点,运行真正的应用程序,在Node上Kubernetes管理的最小运行单元是Pod。Node上运行着Kubernetes的kubelet、kube-proxy服务进程,这些服务进程负责Pod的创建、启动、监控、重启、销毁以及实现软件模式的负载均衡器

kubernetes的优点:

  • 隐藏资源管理和错误处理,用户只需要关注应用的开发
  • 服务高可用、高可靠
  • 可将负载运行在由成千上万机器联合而成的集群中

2.Kubernetes组成

在这里插入图片描述
Kubernetes节点有运行应用容器必备的服务,而这些都是受Master的控制。每个节点上都要运行Docker。Docker来负责所有具体的映像下载和容器运行。
Kubernetes主要由以下几个核心组件组成:

  • etcd:保存了整个集群的状态;
  • apiserver:提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制;
  • controller manager:负责维护集群的状态,比如故障检测、自动扩展、滚动更新等;
  • scheduler:负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上;
  • kubelet:负责维护容器的生命周期,同时也负责Volume(CVI)和网络(CNI)的管理;
  • Container runtime:负责镜像管理以及Pod和容器的真正运行(CRI);
  • kube-proxy:负责为Service提供cluster内部的服务发现和负载均衡;

除了核心组件,还有一些推荐的Add-ons:

  • kube-dns:负责为整个集群提供DNS服务
  • Ingress Controller:为服务提供外网入口
  • Heapster:提供资源监控
  • Dashboard:提供GUI
  • Federation:提供跨可用区的集群
  • Fluentd-elasticsearch:提供集群日志采集、存储与查询

在这里插入图片描述

  • 核心层: Kubernetes最核心的功能,对外提供API构建高层的应用,对内提供插件式应用执行环境

  • 应用层:部署(无状态应用、有状态应用、批处理任务、集群应用等)和路由(服务发现、DNS解析等)

  • 管理层:系统度量(如基础设施、容器和网络的度量),自动化(如自动扩展、动态Provision等)以及策略管理(RBAC、 Quota、PSP、NetworkPolicy等)

  • 接口层:kubectl命令行工具、客户端SDK以及集群联邦

  • 生态系统:在接口层之上的庞大容器集群管理调度的生态系统,可以划分为两个范畴

  • Kubernetes外部: 日志、监控、配置管理、CI、CD、Workflow、 FaaS、OTS应用、ChatOps等

  • Kubernetes内部:CRI、 CNI、CVI、镜像仓库、Cloud Provider、集群自身的配置和管理等

3.kubeadm方式部署集群

实验环境

server1---私有仓库
server2、server3、server4---集群
此实验需要联网
添加host解析(这里不再赘述)

清理之前的环境(由于之前做过swarm集群的搭建,如果没有的话跳过即可)

docker swarm leave 
docker container prune 


docker swarm leave --force
docker container prune 

基础环境部署

(在所有节点都要做)
step1 时间同步:

yum install -y ntpdate
ntpdate time.windows.com

方法2:
真机与阿里云时间同步

vim /etc/chrony.conf
 7 server ntp1.aliyun.com iburst
 23 allow 172.25/16
systemctl start chronyd
chronyc sources -v

在虚拟机中同步真机的时间:

yum install chrony -y
vim /etc/chrony.conf
server 172.25.254.36 iburst
systemctl start chronyd
systemctl enable chronyd
chronyc sources -v

step2 在每个节点添加私有仓库的解析:

vim /etc/hosts
172.25.254.1 server1 reg.westos.org
172.25.254.2 server2
172.25.254.3 server3
172.25.254.4 server4

step3 master与node之间免密:

ssh-keygen 
ssh-copy-id server3
ssh-copy-id server4

step4 关闭swap分区:

swapoff -a	#临时关闭
vim /etc/fstab	#禁用
# /dev/mapper/rhel-swap   swap                    swap    defaults        0 0

集群部署

step1 将桥接的IPv4流量传递到iptables的链:
确保在sysctl配置中的 net.bridge.bridge-nf-call-iptables 被设置为 1

cd /etc/sysctl.d/
vim k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
sysctl -p

step2 安装kubernetes和docker:
docker的安装方法在这里不再赘述
部署k8s的yum源:

cd /etc/yum.repos.d/
vim kubernetes.repo 
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0

yum install docker-ce kubelet kubeadm kubectl container-selinux-2.77-1.el7.noarch.rpm -y

step3 将cgroupdriver改为systemd:

cd /etc/docker
vim daemon.json 
{
  "registry-mirrors": ["https://reg.westos.org"],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2",
  "storage-opts": [
    "overlay2.override_kernel_check=true"
  ]
}
systemctl daemon-reload 
systemctl restart docker
cd /sys/fs/cgroup
ls	#systemd目录的路径

step4 启动kublet和docker:

systemctl start docker
systemctl enable docker
systemctl start kubelet 
systemctl enable kubelet 

step5 指定仓库拉取镜像:

首先我们查看kubeadm的配置信息

kubeadm config print init-defaults

可以看到它默认从k8s.gcr.io上下载镜像,需要翻墙
所以我们直接指定下载时仓库的地址:

kubeadm config images list --image-repository registry.aliyuncs.com/google_containers

从阿里云上拉取kubeadm所需的镜像

kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers

step6 将下载的镜像上传到私有仓库:

首先我们可以新建一个名为kubernetes的仓库
给镜像批量改名:

for i in `docker images | grep registry.aliyuncs.com | awk '{print $1":"$2}'|awk -F / '{print $3}'`;do docker tag registry.aliyuncs.com/google_containers/$i reg.westos.org/kubernetes/$i; done
docker images | grep reg.westos.org

上传:

for i in `docker images | grep reg.westos.org|awk '{print $1":"$2}'`;do docker push $i ;done

我们要在其他节点上都部署好私有仓库,将证书发送过去:

scp -r certs.d server4:/etc/docker
ca.crt 

测试私有仓库:

yum install bash-* -y
docker pull reg.westos.org/kubernetes/kube-proxy:v1.18.1	#尝试拉取
docker images
docker rmi reg.westos.org/kubernetes/kube-proxy:v1.18.1	#删除

step7 启动kubernetes集群:

这里我们选择plannel网络

kubeadm init --pod-network-cidr=10.244.0.0/16 --image-repository reg.westos.org/kubernetes

启动完成后会有提示,让你做如下操作:
在这里插入图片描述

useradd kubeadm
visudo
su - kubeadm
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

step8 node节点加入集群:

kubeadm join 172.25.254.1:6443 --token bxkh88.3xppwvn19x2b79pp --discovery-token-ca-cert-hash sha256:0abdd176472e86a55bfc7dc99f553dc62e6d163089e833027e788a8645ef891c

注意:sha256后面的内容是启动集群时生成的的信息

查看节点状态:

kubectl get nodes
kubectl get pod -n kube-system

step9 配置kubectl命令补齐功能:

echo "source <(kubectl completion bash)" >> ~/.bashrc
source .bashrc

step10 flannel网络管理:

我们可以看到在这之前节点的状态,前两行一直是pending状态,原因是缺少网络模型

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/2140ac876ef134e0ed5af15c65e414cf26827915/Documentation/kube-flannel.yml

等待一会再次查看集群状态:

kubectl get nodes
kubectl get pod -n kube-system

在这里插入图片描述
当它的状态都为running时,集群就部署成功了!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值