腾飞 .net core
k8s 是什么
自动化部署、扩容以及运维的开源平台
节省资源 优化硬件资源作用
k8s实战
k8s 入门第一讲
minikube
Intel x86_64
curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
Apple arm64
curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-arm64
sudo install minikube /usr/local/bin/
创建linux 用户
// 创建用户
useradd aehyok
// 设置密码
passwd aehyok aehyok
// 切换用户
su aehyok
// 删除用户
userdel aehyok
minikube快速搭建K8s环境的工具(单机版)
找到对应版本的下载链接,https://minikube.sigs.k8s.io/docs/start/
# Intel x86_64
curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
# Apple arm64
curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-arm64
sudo install minikube /usr/local/bin/
minikube version
kubectl操作k8s的工具
kubectl 来操作k8s,它位于集群之外,不属于集群
- 查看节点状态
// 安装kubectl
minikube kubectl
// 启动
minikube start --kubernetes-version=v1.23.3
minikube start --image-mirror-country='cn' --driver=docker --kubernetes-version=v1.23.3 --force
// 快捷命令
alias kubectl="minikube kubectl --"
// 设置永久生效
vim ~/.bashrc
//alias kubectl="minikube kubectl --" 将这一行加入
// 查看版本
kubectl version
// 运行一个nginx (类似于docker run ) 指定镜像 自动拉取运行
kubectl run ngx --image=nginx:alpine
// 穿了马甲的容器
kubectl get pod
kubectl get pod xxx(name)
// 查看日志
kubectl log xxx(name)
// 拷贝文件
// 将本地文件拷贝到pod
kubectl cp a.txt ngx:/tmp
// 进入pod内部(需要在pod后面加上--)
kubectl exec -it ngx-- sh
node节点(集群中的计算机被称为node)
kubectl get node
Master 和 Node 的划分不是绝对的。当集群的规模较小,工作负载较少的时候,Master 也可以承担 Node 的工作。 就像我们搭建的 minikube 环境,它就只有一个节点,这个节点既是 Master 又是 Node。
控制面的节点为Master node (K8s的核心) 数据面的节点为Worker node(用来干活的)
node节点的内容构成
k8s的节点主要由很多的模块构成,而这些模块又分为组件(component)和插件(addon)两类。 组件实现了k8s的核心功能,没有这些组件k8s是无法启动的,而插件则是一些附加的功能,不安装也不影响k8s的运行。
master node中的组件
apiserver、etcd、scheduler、controller-manager
- apiserver 是整个 Kubernetes 系统的唯一入口,它对外公开了一系列的 RESTful API,并且加上了验证、授权等功能, 所有其他组件都只能和它直接通信,可以说是 Kubernetes 里的联络员。
- etcd 是一个高可用的分布式 Key-Value 数据库,用来持久化存储系统里的各种资源对象和状态,相当于 Kubernetes 里的配置管理员。 注意它只与 apiserver 有直接联系,也就是说任何其他组件想要读写 etcd 里的数据都必须经过 apiserver。
- scheduler 负责容器的编排工作,检查节点的资源状态,把 Pod 调度到最适合的节点上运行,相当于部署人员。因为节点状态和 Pod 信息都存储在 etcd 里, 所以 scheduler 必须通过 apiserver 才能获得。
- controller-manager 负责维护容器和节点等资源的状态,实现故障检测、服务迁移、应用伸缩等功能,相当于监控运维人员。 同样地,它也必须通过 apiserver 获得存储在 etcd 里的信息,才能够实现对资源的各种操作。
查看master node中组件的运行状态
kubectl get pod -n kube-system
worker node节点的组件
kubelet、kube-proxy、container-runtime。
- kubelet kubelet 是 Node 的代理,负责管理 Node 相关的绝大部分操作,Node 上只有它能够与 apiserver 通信,实现状态报告、命令下发、启停容器等功能,相当于是 Node 上的一个“小管家”。
- kube-proxy kube-proxy 的作用有点特别,它是 Node 的网络代理,只负责管理容器的网络通信,简单来说就是为 Pod 转发 TCP/UDP 数据包,相当于是专职的“小邮差”。
- container-runtime 第三个组件 container-runtime 我们就比较熟悉了,它是容器和镜像的实际使用者,在 kubelet 的指挥下创建容器,管理 Pod 的生命周期,是真正干活的“苦力”。
Kubernetes 的定位是容器编排平台,所以它没有限定 container-runtime 必须是 Docker, 完全可以替换成任何符合标准的其他容器运行时,例如 containerd、CRI-O 等等,只不过在这里我们使用的是 Docker。
// 登录节点
minikube ssh
// 通过docker查看 kube-proxy
docker ps |grep kube-proxy
而kubelet的查看不在docker中,要通过ps
ps -ef|grep kubelet
插件(addon)
// 查看所有的插件组件
minikube addons list
k8s开启dashboard
kubectl proxy --address=0.0.0.0 ngx 6666:6666
固定端口访问以及nginx配置转发
dashboard
server {
listen 8500;
location / {
proxy_pass http://k8sserver;
proxy_redirect default;
}
}
upstream k8sserver {
server 192.168.49.2:30080;
}
pod
// 创建
kubectl apply -f xxxx.yml
// 删除
kubectl delete -f xxxx.yml
kubectl delete pod xxx (yml中的name)
// k8s不像docker一样,有前台运行和后台运行,k8s都是后台运行 如果想看日志
kubectl log xxx(name)
// 查看pod
kubectl get pod
// 查看pod更详细的状态
kubectl describe pod xxx(name)
docker 版本升级
ubuntu 界面开启
apt update
// 一键安装
curl -sSL https://get.daocloud.io/docker | sh
docker version
docker network ls
ifconfig
centos 安装docker
yum install docker-ce -y