简单来说就是:物理单机---->虚拟化---->容器化---->云原生
IBM/Sun公司 物理机
VMware/KVM/Xen
Iaas(AWS/GCE)(Infrastruture as a service)
Openstack
Paas(Platform as a service)
Saas(Software as a service)
逐渐形成了AWS/Azure/Aliyun/GCE/ 四大云厂商
Docker
应用的微服务化和容器化;
K8S应用上云最主流的解决方案;
发展的总体趋势:
应用部署运行模式:单机 -> 虚拟机 -> 容器 -> 云原生
应用部署运行:更敏捷、更自动化、更有效率、更低成本
开发者:更聚焦于应用本身
官方网站:https://kubernetes.io/zh/docs/setup/production-environment/
容器编排管理平台:
微服务支撑平台:服务发现、服务注册、服务发现和自动负载均衡等
可移植的云平台: 可以跨云部署
官方教程:https://kubernetes.io/zh/docs/tasks/tools/install-kubectl-linux/
如果没有curl: sudo apt install curl
用以下命令下载最新发行版:
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
curl -LO "https://dl.k8s.io/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl.sha256"
echo "$(<kubectl.sha256) kubectl" | sha256sum --check
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
kubectl version --client
配置kubectl自动提示:
type _init_completion
source /usr/share/bash-completion/bash_completion
echo 'source <(kubectl completion bash)' >>~/.bashrc
#执行该条命令时,执行sudo su,否则Permission denied
kubectl completion bash >/etc/bash_completion.d/kubectl
echo 'alias k=kubectl' >>~/.bashrc
echo 'complete -F __start_kubectl k' >>~/.bashrc
Cluster
是计算、存储和网络资源的集合,Kubernetes 利用这些资源运行各种基于容器的应用;
Master节点
主要职责是调度,即决定将应用放在哪里运行,为了实现高可用,可以运行多个 Master;
主要的核心组件:api server/Controller Manager/scheduler/etcd
Node节点
由 Master 管理,职责是运行容器应用;主要的核心组件:kubelet、kube-proxy
Pod
Kubernetes 的最小工作单元,每个 Pod 包含一个或多个容器;
引入 Pod 主要基于下面两个目的:
可管理性:有些容器天生就是需要紧密联系,一起工作;
通信和资源共享:Pod 中的所有容器使用同一个网络 namespace,即相同的 IP 地址和 Port 空间。它们可以直接用 localhost 通信;
Controller
Kubernetes 通常不会直接创建 Pod,而是通过 Controller 来管理 Pod 的;
Controller 中定义了 Pod 的部署特性,比如有几个副本,在什么样的 Node 上运行等;
为了满足不同的业务场景,Kubernetes 提供了多种 Controller,包括 Deployment、ReplicaSet、DaemonSet、StatefuleSet、Job 等;
Deployment :最常用的 Controller,通过创建 Deployment 来部署应用的;
ReplicaSet 实现了 Pod 的多副本管理;通常不需要直接使用 ReplicaSet;
DaemonSet 用于每个 Node 最多只运行一个 Pod 副本的场景;
StatefuleSet 能够保证 Pod 的每个副本在整个生命周期中名称是不变的;
Job 用于运行结束就删除的应用;而其他 Controller 中的 Pod 通常是长期持续运行。
Service
Service 定义了外界访问一组特定 Pod 的方式。Service 有自己的 IP 和端口,Service 为 Pod 提供了负载均衡;
Kubernetes 运行容器(Pod)与访问容器(Pod)这两项任务分别由 Controller 和 Service 执行
Namespace
Namespace 可以将一个物理的 Cluster 逻辑上划分成多个虚拟 Cluster,每个 Cluster 就是一个 Namespace。不同 Namespace 里的资源是完全隔离的;
Kubernetes 默认创建了两个 Namespace;
default -- 创建资源时如果不指定,将被放到这个 Namespace;
kube-system -- Kubernetes 自己创建的系统资源将放到这个 Namespace 中;
官方文档:https://minikube.sigs.k8s.io/docs/start/
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube_latest_amd64.deb
sudo dpkg -i minikube_latest_amd64.deb
检查minikube:minikube version
启动cluster:minikube start
minikube version;
minikube start;
kubectl version;//client+server;
kubectl cluster-info;
kubectl get nodes;
基本语法可以通过 kubectl create deployment --help 查看;基本格式:
kubectl create deployment NAME --image=image -- [COMMAND] [args...] [options]
例子:
# Create a deployment named my-dep that runs the nginx image with 3 replicas.
kubectl create deployment my-dep --image=nginx --replicas=3# Create a deployment named my-dep that runs the busybox image and expose port 5701.
kubectl create deployment my-dep --image=busybox --port=5701
#获取the application we deployed
kubectl get pods
kubectl describe pods
#
kubectl get services
#
kubectl expose --help
#
kubectl expose deployment/kubernetes-bootcamp --type="NodePort" --port 8080
#
kubectl get services
#
kubectl describe service kubernetes-bootcamp
4.5 Scaling Your App
#
kubectl get deployments
#see the ReplicaSet created by the Deployment
kubectl get replicasets/kubectl get replicasets.apps
#scale the Deployment to 4 replicas
kubectl scale deployment kubernetes-bootcamp --replicas=4
#显示node的信息
kubectl get pods -o wide
#
kubectl describe deployments.apps kubernetes-bootcamp#查询ubuntu host ip
ifconfig -a