kubernetes学习笔记之-----基础篇

一、应用部署运行模式变迁

kubernetes学习笔记之-----基础篇_第1张图片

简单来说就是:物理单机---->虚拟化---->容器化---->云原生

1 物理单机

IBM/Sun公司 物理机

2 虚拟化

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/ 四大云厂商

3 容器化

Docker 

4 云原生

应用的微服务化和容器化;
K8S应用上云最主流的解决方案;

发展的总体趋势:
应用部署运行模式:单机 -> 虚拟机 -> 容器 -> 云原生
应用部署运行:更敏捷、更自动化、更有效率、更低成本
开发者:更聚焦于应用本身

二 、k8s基础知识

官方网站:https://kubernetes.io/zh/docs/setup/production-environment/

1 k8s是什么?定位是什么?

容器编排管理平台:
微服务支撑平台:服务发现、服务注册、服务发现和自动负载均衡等
可移植的云平台: 可以跨云部署

2 在 Linux 上安装 kubectl

官方教程: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 "$( 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

3 k8s 几个重要的概念

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 中;

三、本地配置minikube环境

官方文档: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学习k8s基础操作

4.1 create a cluster

minikube version;
minikube start;
kubectl version;//client+server;
kubectl cluster-info;
kubectl get nodes;

4.2 deploy an app

基本语法可以通过 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

4.3  explore your app

#获取the application we deployed
kubectl get pods
kubectl describe pods

4.4 expose your app

#
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

你可能感兴趣的:(Kubernetes,kubernetes)