1.1、Kubernetes 简介及部署方法
在部署应用程序的方式上面,主要经历了三个阶段
传统部署:互联网早期,会直接将应用程序部署在物理机上
优点:简单,不需要其它技术的参与
缺点:不能为应用程序定义资源使用边界,很难合理地分配计算资源,而且程序之间容易产生影响虚拟化部署:可以在一台物理机上运行多个虚拟机,每个虚拟机都是独立的一个环境
优点:程序环境不会相互产生影响,提供了一定程度的安全性
缺点:增加了操作系统,浪费了部分资源
容器化部署:与虚拟化类似,但是共享了操作系统
容器化部署方式给带来很多的便利,但是也会出现一些问题:
一个容器故障停机了,怎么样让另外一个容器立刻启动去替补停机的容器当并发访问量变大的时候,怎么样做到横向扩展容器数量
1.2 容器编排应用
为了解决这些容器编排问题,就产生了一些容器编排的软件:
·Swarm: Docker自己的容器编排工具
· Mesos: Apache的一个资源统一管控的工具,需要和Marathon结合使用
·Kubernetes: Google开源的的容器编排工具
1.3kubenets简介
在Docker 作为高级容器引擎快速发展的同时,在Google内部,容器技术已经应用了很多年 Borg系统运行管理着成千上万的容器应用。
Kubernetes项目来源于Borg,可以说是集结了Borg设计思想的精华,并且吸收了Borg系统中的经验和教训。Kubernetes对计算资源进行了更高层次的抽象,通过将容器进行细致的组合,将最终的应用服务交给用户。kubernetes的本质是一组服务器集群,它可以在集群的每个节点上运行特定的程序,来对节点中的容器进行管理。目的是实现资源管理的自动化,主要提供了如下的主要功能:自我修复:一旦某一个容器崩溃,能够在1秒中左右迅速启动新的容器 弹性伸缩:可以根据需要,自动对集群中正在运行的容器数量进行调整 服务发现:服务可以通过自动发现的形式找到它所依赖的服务负载均衡:如果一个服务起动了多个容器,能够自动实现请求的负载均衡 版本回退:如果发现新发布的程序版本有问题,可以立即回退到原来的版本 存储编排:可以根据容器自身的需求自动创建存储卷
2.1 k8s 环境部署说明
1.systemctl disabled firewalldsystemctl stop firewalldgrubby --update-kernel ALL --args selinux=0
2.vim /etc/rc.d/rc.localswapoff /dev/dm-1chmod +x /etc/rc.d/rc.local
3.# cat /etc/hosts127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4::1 localhost localhost.localdomain localhost6 localhost6.localdomain6172.25.254.100 k8s-master172.25.254.10 k8s-node1.timinglee.org172.25.254.20 k8s-node2.timinglee.org172.25.254.250 reg.timinglee.org
4.cat /etc/yum.repos.d/docker-ce.repo[docker]name=dockerbaseurl=https://mirrors.aliyun.com/docker-ce/linux/rhel/9/x86_64/stable/gpgcheck=0dnf install docker-ce -y
2.2安装k8s部署工具
[root@k8s-master ~]# cat /etc/yum.repos.d/k8s.repo
[k8s]
name=k8s
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.30/rpm/
gpgcheck=0
dnf install kubelet-1.30.0 kubeadm-1.30.0 kubectl-1.30.0 -y
设置kubectl命令补齐功能
[root@k8s-master ~]# yum install bash-completion -y
[root@k8s-master ~]# echo "source <(kubectl completion bash)" >> ~/.bashrc[root@k8s-master ~]# source ~/.bashrc
在所有节点安装cri-docker
root@k8s-master ~l#ls
cri-dockerd -0.3.14-3.el8.x86 64.rpm
libcgroup-0.41-19.el8.x86 64.rpm
[root@k8s-master ~]# yum install *.rpm -y
root@k8s-master~l#systemctl enable --now cri-dockerCreated symlink /etc/systemd/'svstem/multi-user.target.wantscr-docker.sevice - /usr/lib/systemd/svstem/cri-docker.service[root@k8s-master ~]# vim /lib/systemd/system/cri-docker.service
[Unit]
Description=CRl Interface for Docker Application Container Engine
Documentation=https://docs.mirantis.com
After=network-online.target firewalld.service docker.service
Wants=network-online.target
Requires=cri-docker.socket
[Service]
Type=notify
[root@k8s-master ~]# systemctl daemon-reload[root@k8s-master ~]# systemctl start cri-docker[root@k8s-master ~]#ll /var/run/cri-dockerd.sock
srw-rw---- 1 root docker 1 0 月 10 23:19 /var/run/cri-dockerd.sock #cri-dockerd的套接字文件
在master节点拉取k8s所需镜像
#拉取k8s集群所需要的镜像
[root@k8s-master ~]# kubeadm config images pull \
--image-repository registry.aliyuncs.com/google_containers \ --kubernetes-version v1.30.0\
--cri-socket=unix:///var/run/cri-dockerd.sock
[root@k8s-master ~]# docker images | awk '/google/{ print $1":"$2}' \| awk -F "/" '{system("docker tag "$0" reg.timinglee.org/k8s/"$3)}'
[root@k8s-master ~]# docker images | awk '/k8s/{system("docker push "$1":"$2)}'
3.集群初始化
启动kubelet服务
#执行初始化命令
[root@k8s-master ~]# kubeadm init --pod-network-cidr=192.188.0.0/16\ --image-repository reg.timinglee.org/k8s \ --kubernetes-version v1.30.0\
--cri-socket=unix:///var/run/cri-dockerd.sock
[root@k8s-master ~]# kubeadm reset --cri-socket=unix:///var/run/cri-dockerd.sock #重置集群
#指定集群配置文件变量
[root@k8s-master ~]# echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile#当前节点没有就绪,因为还没有安装网络插件,容器没有运行[root@k8s-master ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
k8s-master.timinglee.org NotReady control-plane 4m25s v1.30.0
root@k8s-master ~]# kubectl get pod -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-647dc95897-2sgn8 0/1 Pending 0 6m13s
kube-system coredns-647dc95897-bvtxb 0/1 Pending 0 6m13s
kube-system etcd-k8s-master.timinglee.org 1/1 Running 0 6m29s
kube-system kube-apiserver-k8s-master.timinglee.org 1/1 Running 0 6m30s
kube-system kube-controller-manager-k8s-master.timinglee.org 1/1 Running 0 6m29s
kube-system kube-proxy-fq85m 1/1 Running 0 6m14s
kube-system kube-scheduler-k8s-master.timinglee.org 1/1 Running 0 6m29s
指定网络插件
[root@k8s-master ~]# vim kube-flannel.yml
image: reg.timinglee.org/flannel/flannel:v0.25.5
image: reg.timinglee.org/flannel/flannel-cni-plugin:v1.5.1-flannel1 image: reg.timinglee.org/flannel/flannel:v0.25.5
[root@k8s-master ~]# docker load -i flannel-0.25.5.tag.gz
先建立flannel项目
[root@k8s-master ~]# docker tag flannel/flannel:v0.25.5 reg.timinglee.org/flannel/flannel:v0.25.5[root@k8s-master ~]# docker push reg.timinglee.org/flannel/flannel:v0.25.5
[root@k8s-master ~]# docker tag flannel/flannel-cni-plugin:v1.5.1-flannel1 reg.timinglee.org/flannel/flannei[root@k8s-master ~]# docker push reg.timinglee.org/flannel/flannel-cni-plugin:v1.5.1-flannel1安装
[root@k8s-master ~]# kubectl apply -f kube-flannel.yml测试
[root@k8s-master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master.timinglee.org Ready control-plane 17m v1.30.5
将工作加入集群
kubeadm join 172.25.254.100:6443 --token5hwptm.zwn7epa6pvatbpwf--discovery-token-ca-cert-hashsha256:52f1a83b70ffc8744db5570288ab51987ef2b563bf906ba4244a300f61e9db23 --cri-socket=unix:///var/run/cri-dockerd.sock