企业运维实战--k8s学习笔记1.Kubernetes简介、k8s集群安装和部署
企业运维实战--Kubernetes简介、k8s安装和集群部署前言--Kubernetes简介k8s集群安装及部署step1:docker引擎配置step2:k8s安装和部署前言–Kubernetes简介k8s集群安装及部署安装环境:四台rhel7.6版本虚拟机,火墙和selinux关闭。其中,server1负责harbor容器仓库配置,server2负责k8s主机,server3为k8s从机,所
企业运维实战--k8s学习笔记1.Kubernetes简介、k8s安装和集群部署
前言–Kubernetes简介
Kubernetes是一个基于容器技术的分布式架构领先方案。
继docker作为容器引擎之后,k8s横空出世。 k8s是一个编排容器的工具,其实也是管理应用的全生命周期的一个工具,从创建应用,应用的部署,应用提供服务,扩容缩容应用,应用更新,故障自愈,都非常的方便。
Kubernetes的好处:
- 隐藏资源管理和错误处理,用户仅需要关注应用的开发。
- 服务高可用、高可靠。
- 可将负载运行在由成千上万的机器联合而成的集群中。
Kubernetes的核心组件:
核心组件名称 | 含义 |
---|---|
master | 集群的"大脑",集群控制节点,负责整个集群的管理和控制,基本上接收Kubernetes的所有控制命令,master负责具体的执行过程 |
node | 工作负载节点,负责“干活的”,每个Node都会被Master分配一些工作负载(Docker容器),当某个Node宕机时,其上的工作负载会被Master自动转移到其他Node节点上。 |
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 | 提供集群日志采集、存储与查询 |
大致工作原理图:
k8s集群安装及部署
安装环境:四台rhel7.6版本虚拟机,火墙和selinux关闭。
其中,server1负责harbor容器仓库配置,server2负责k8s master节点,server3为k8s node节点,所有k8s服务器均要能上网。
step1:docker引擎配置
要求所有节点必须配置docker-ce服务,且连接到server1的harbor仓库,可参考本人博客:
企业运维实战–最全Docker学习笔记1.Docker简介、安装部署、镜像构建、Dockerfile详解、镜像构建、镜像优化、本地私有仓库搭建
企业运维实战–最全Docker学习笔记2.本地容器仓库加密认证、harbor远程容器仓库搭建
配置好docker后,所有k8s禁用swap分区,注释掉/etc/fstab分区的定义
swapoff -a
设定docker cgroup driver:systemd
设定完成后重启 docker服务,docker info
查看
上述操作server2、3、4中均需要操作。
step2:k8s安装和部署
编写k8s安装软件仓库文件,
cd /etc/yum.repos.d/
vim k8s.repo
cat k8s.repo
检验仓库文件是否书写有误
yum repolist
查看服务版本
yum list kubeadm
安装服务
yum install -y kubelet kubeadm kubectl
设置服务开机自启
systemctl enable --now kubelet.service
配置server2到server3、4的免密登陆,方便传输文件(非必要操作)
将软件仓库文件传给server3、4
ssh-keygen
ssh-copy-id server3
ssh-copy-id server4
scp k8s.repo server3:/etc/yum.repos.d/
scp k8s.repo server4:/etc/yum.repos.d/
server3、4同样安装与server2同样的服务并设置开机自启。
列出所需镜像
kubeadm config images list --image-repository registry.aliyuncs.com/google_containers
拉取镜像
kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers
报错,错误原因没有coredns:v1.8.0的镜像源。
解决方法:在docker中pull,然后将所有镜像push到harbor容器仓库中,在进行k8s初始化。
server1:
docker pull coredns/coredns:1.8.0
harbor创建k8s项目,并公开项目。
将coredns:1.8.0 push到harbor仓库中,打标签时需要将新的镜像命名为coredns:v1.8.0
server2中
批量对所有镜像打标签,准备push到harbor中
docker images |grep ^registry.aliyuncs.com | awk '{print $1":"$2}' | awk -F/ '{system("docker tag "$0" hyl.westos.org/k8s/"$3"")}'
查看打标签之后的镜像
docker images | grep ^hyl.westos.org | awk '{print $1":"$2}'
将镜像批量push到harbor仓库中
docker images | grep ^hyl.westos.org/k8s | awk '{system("docker push "$1":"$2"")}'
初始化k8s集群
kubeadm init --pod-network-cidr=10.244.0.0/16 --image-repository hyl.westos.org/k8s
初始化后,提示操作,此处的操作需要复制粘贴保存起来,方便后续使用。
这里我们时root用户,所以选择按照提示配置环境变量。
export KUBECONFIG=/etc/kubernetes/admin.conf
vim .bash_profile
cat .bash_profile
echo "source <(kubectl completion bash)" >> ~/.bashrc
配置好环境变量后注销登陆,命令行输入kubectl 然后tab,出现如下情况则证明配置已完成。
查看节点,发现有两个节点未启动
使用用flannel网络组件完善集群
将镜像压入harbor仓库
vim kube-flannel.yml 修改image路径为仓库路径
启动组件
kubectl apply -f kube-flannel.yml
再次查看节点情况,所有节点均running
kubectl get pod -n kube-system
server3、4:
将本机添加到部署好的server2集群中,此处命令为之前保存的初始化命令。
> kubeadm join 172.25.9.2:6443 --token 4sdwux.vxlnp9t2te6064hg \
--discovery-token-ca-cert-hash sha256:3f501d3b4ac8ee9e991c3221cac911932ecf877cf2ef125413229c2c7c508b59
查看节点
kubectl get pod -n kube-system
k8s添加节点成功,k8s集群部署成功。
更多推荐
所有评论(0)