Kubernetes简介
·Kubernetes集群包含有节点代理kubelet和Master组件(APIs,scheduler,etc),一切都基于分布式的存储系统。
Kubernetes设计理念和功能其实就是一个类似Linux的分层架构
更多详细的介绍可以参考官网
Kubernetes部署
实验环境:
准备四台虚拟机保证时间同步
首先安装chrony软件
然后打开vim /etc/chrony.conf,写入内网地址server 172.25.0.250 iburst
systemctl enable --now chronyd
然后做好解析
172.25.0.1server1 reg.westos.org #同时也要保证私有仓库也要有解析
每台主机都要部署docker服务我们将已经部署好的
scp docker-ce.repo server4:/etc/yum.repos.d/#拷贝一下yum源
yum install docker-ce#安装
也要保证私有仓库的节点均没问题
然后我们创建一个k8s文件
vim k8s.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
每个节点要设置网关,保证能上网
测试yum repolist
然后我们在server2中安装软件
将server2中的k8s.repo拷贝到server3和server4这样我们就能安装软件了
scp k8s.repo server3:/etc/yum.repos.d/
scp k8s.repo server4:/etc/yum.repos.d/
然后在sever3和server4中安装软件
yum install -y kubelet kubeadm kubectl
然后保证每个节点的docker开机自启动
systemctl enable --now docker
修改我们的驱动将cgroup改成systemd,编辑我们的文件daemon.json
然后systemctl daemon_reload systemctl restart docker
将该配置文件fenbie拷贝到server3和server4中
docker和kubeadm都要设置开机自启动
默认从k8s.gcr.io上下载组件镜像,需要翻墙才可以,所以需要修改镜像仓库
kubeadm config images list
指定镜像地址
我们将镜像上传到我们的私有仓库上,
先做认证
然后在harbor上穿件一个项目,把我们的镜像上传到里面去,先找到要上传的镜像然后重命名
然后上传
手动测试拉取我们项目中的镜像
•# kubeadm init --pod-network-cidr=10.244.0.0/16 --image-repository registry.aliyuncs.com/google_containers //初始化集群 --pod-network-cidr=10.244.0.0/16 //使用flannel网络组件时必须添加
--kubernetes-version //指定k8s安装版本
然后删除这些拉取的镜像我们要让他们自动拉取,然后做初始化
去其他节点查看
根据提示创建一个用户
因为不能tab键补齐了根据提示
根据官网提示
POD管理
Pod是可以创建和管理Kubernetes计算的最小可部署单元,一个Pod代表着集群中运行的一个进程,每个pod都有一个唯一的ip 一个pod类似一个豌豆荚,包含一个或多个容器(通常是docker),多个容器间共享IPC、Network和UTC namespace。
创建pod应用
集群内部任意节点可以访问Pod,但集群外部无法直接访问
删除pod节点
默认管理端不参与调度
先利用命令行
我们做一个拉伸
service是一个抽象概念,定义了一个服务的多个pod逻辑合集和访问pod的策略,一般把service称为微服务。
创建service
$ kubectl expose deployment nginx --port=80 --target-port=80
此时pod客户端可以通过service的名称访问后端的两个Pod
ClusterIP: 默认类型,自动分配一个仅集群内部可以访问的虚拟IP
kubectl expose deployment myapp --port=80 --target-port=80
查看更多的细节
查看能否负载均衡后端
我们也可以进行伸缩做成两个副本
使用NodePort类型暴露端口,让外部客户端访问Pod
kubectl edit svc nginx //修改service的type为NodePort
kubectl expose deployment nginx --port=80 --target-port=80 --type=NodePort //也可以在创建service时指定类型
kubectl edit svc myapp
修改service的type为NodePort
NodePort: 在ClusterIP基础上为Service在每台机器上绑定一个端口,这样就可以通过 NodeIP:NodePort 来访问该服务
查看端口号然后访问
Pod扩容与缩容
kubectl scale --replicas=6 deployment nginx
kubectl scale --replicas=3 deployment nginx
更新pod镜像
kubectl set image deployment nginx nginx=nginx:1.16.0 --record
回滚:
kubectl rollout history deployment nginx //查看历史版本
kubectl rollout undo deployment nginx --to-revision=1 //回滚版本
资源清单
$ kubectl api-versions //查询命令
Pod,ReplicaSet,Deployment,StatefulSet,DaemonSet,Job,Cronjob
•metadata: //元数据
name: //对像名称
namespace: //对象属于哪个命名空间
labels: //指定资源标签,标签是一种键值数据
vim .vimrc
修改我们的资源清单创建一个pod
创建两个pod
也可以再pod.yaml
添加一个tty:true
我们也可以在我们的pod文件上添加端口和映射
指定资源运行的上限
我们修改pod文件将调度改到server3中