Jackey的k8s学习之道
**Jackey的K8S之路**0、docker相关概念docker的存在是为了更方便快捷地去部署一个应用,两个重要的概念,镜像和容器。镜像它的作用有点像maven工程的pom文件,只要写好了pom文件,IDEA就会自动去下载这些需要的依赖,镜像会把所有需要用到的依赖打包,与pom不同的是,镜像还包含着应用程序。镜像和容器的关系,相似于类和对象的关系,镜像是类,容器是镜像的一个实例化。一个镜像可
**
Jackey的K8S之路
**
0、docker相关概念
docker的存在是为了更方便快捷地去部署一个应用,两个重要的概念,镜像和容器。镜像它的作用有点像maven工程的pom文件,只要写好了pom文件,IDEA就会自动去下载这些需要的依赖,镜像会把所有需要用到的依赖打包,与pom不同的是,镜像还包含着应用程序。镜像和容器的关系,相似于类和对象的关系,镜像是类,容器是镜像的一个实例化。一个镜像可以实例化出好多容器。
1、docker常用指令
# 从docker hub拉取镜像
docker pull <image-name>:<tag>
# 查看镜像列表
docker images
# 查看正在运行的容器
docker ps
# 查看所有的容器,包括已经停止的容器
docker ps -a
# 查看容器的详细信息
docker inspect <容器名称|容器ID>
# 运行容器,命令语法:docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
# 常用的命令选项如下(需要注意的是,选项参数要放在 run 和 镜像名称 中间):
# -d: 后台运行容器,并返回容器ID;
# -i: 以交互模式运行容器,通常与 -t 同时使用;
# -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
# -P: 随机端口映射,容器内部端口随机映射到主机的端口
# -p: 指定端口映射,格式为:主机(宿主)端口:容器端口
# --name="nginx-lb": 为容器指定一个名称;
# -e username="ritchie": 设置环境变量;
# --volume , -v: 绑定一个卷
#
# 使用docker镜像nginx:latest以后台模式启动一个容器,并将容器命名为mynginx。
docker run --name mynginx -d nginx:latest
# 使用镜像nginx:latest以后台模式启动一个容器,并将容器的80端口映射到主机随机端口。
docker run -P -d nginx:latest
# 使用镜像 nginx:latest,以后台模式启动一个容器,将容器的 80 端口映射到主机的 80 端口,主机的目录 /data 映射到容器的 /data。
docker run -p 80:80 -v /data:/data -d nginx:latest
# 绑定容器的 8080 端口,并将其映射到本地主机 127.0.0.1 的 80 端口上。
docker run -p 127.0.0.1:80:8080/tcp ubuntu bash
# 使用镜像nginx:latest以交互模式启动一个容器,在容器内执行/bin/bash命令。
docker run -it nginx:latest /bin/bash
# 查看容器日志
docker logs <容器名称|容器ID>
# 停止容器
docker stop <容器名称|容器ID>
# 删除容器,并且只能删除已经停止的容器
docker rm <容器名称|容器ID>
# 清除全部已停止的容器
docker container prune
# 命令规律总结
# docker run:
docker run +各种参数(-i -t -d -p -P -v --name) + 镜像名 + 创建容器后的操作
# -p参数
-p + 主机ip:port:容器port
eg. docker run -p 127.0.0.1:80:8080/tcp ubantu bash
# -v参数
-v + 本地路径 : 容器路径
eg. docker run -v /host/data:/volume/data ubantu bash
2、k8s相关概念
-
k8s是一个容器编排工具,重点在编排,它的存在是符合客观发展规律的,当docker使用越来越广泛,服务器中的容器也就会越来越多,就面临着管理这些容器的任务,比如我们要部署一个web项目,需要先启动Mysql,再启动tomcat,最后是Ngix,如何去控制容器运行的顺序,k8s应运而生。
-
k8s中的一个重要概念是pod。pod是k8s的最小单元,每个pod中含有一个或多个container。它就像小组长,寝室长,举一个生活中的例子,本科的时候当班长,老师要统计所有学生的信息,我挨个去问太麻烦了,就交给寝室长去做,我只负责对接寝室长。寝室长就是pod,寝室成员就像是多个container。
-
k8s把container进一步抽象成pod。通过pod来管理几个相关联的container。
-
k8s也是主从架构
-
k8s类似yarn,都是为了管理,管理对象不同,yarn管理的是进程,k8s管理的是容器。
-
pod只能通过k8s的集群内部ip地址访问,要想让它公开,需要把它暴露为service
3、用minikube运行一个应用
#使用 kubectl create 命令创建管理 Pod 的 Deployment。该 Pod 根据提供的 Docker 镜像运行 Container。
$ kubectl create deployment hello-node --image=k8s.gcr.io/echoserver:1.4
deployment.apps/hello-node created
#查看 Deployment:
$ kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
hello-node 1/1 1 1 13s
#查看 Pod:
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
hello-node-7567d9fdc9-brx28 1/1 Running 0 85s
# 查看集群事件:
$ kubectl get events
LAST SEEN TYPE REASON OBJECT MESSAGE
106s Normal Scheduled pod/hello-node-7567d9fdc9-brx28 Successfully assigned default/hello-node-7567d9fdc9-brx28 to minikube
104s Normal Pulling pod/hello-node-7567d9fdc9-brx28 Pulling image "k8s.gcr.io/echoserver:1.4"
104s Normal Pulled pod/hello-node-7567d9fdc9-brx28 Successfully pulled image "k8s.gcr.io/echoserver:1.4" in 552.292333ms
104s Normal Created pod/hello-node-7567d9fdc9-brx28 Created container echoserver
103s Normal Started pod/hello-node-7567d9fdc9-brx28 Started container echoserver
106s Normal SuccessfulCreate replicaset/hello-node-7567d9fdc9 Created pod: hello-node-7567d9fdc9-brx28
106s Normal ScalingReplicaSet deployment/hello-node Scaled up replica set hello-node-7567d9fdc9 to 1
6m39s Normal NodeHasSufficientMemory node/minikube Node minikube status is now: NodeHasSufficientMemory
6m39s Normal NodeHasNoDiskPressure node/minikube Node minikube status is now: NodeHasNoDiskPressure
6m39s Normal NodeHasSufficientPID node/minikube Node minikube status is now: NodeHasSufficientPID
6m14s Normal Starting node/minikube Starting kubelet.
6m14s Normal NodeHasSufficientMemory node/minikube Node minikube status is now: NodeHasSufficientMemory
6m14s Normal NodeHasNoDiskPressure node/minikube Node minikube status is now: NodeHasNoDiskPressure
6m14s Normal NodeHasSufficientPID node/minikube Node minikube status is now: NodeHasSufficientPID
6m13s Normal NodeNotReady node/minikube Node minikube status is now: NodeNotReady
6m13s Normal NodeAllocatableEnforced node/minikube Updated Node Allocatable limit across pods
6m6s Normal RegisteredNode node/minikube Node minikube event: Registered Node minikube in Controller
6m6s Normal NodeReady node/minikube Node minikube status is now: NodeReady
6m2s Normal Starting node/minikube Starting kube-proxy.
# 查看 kubectl 配置:
$ kubectl config view
apiVersion: v1
clusters:
- cluster:
certificate-authority: /root/.minikube/ca.crt
extensions:
- extension:
last-update: Wed, 17 Nov 2021 06:30:03 UTC
provider: minikube.sigs.k8s.io
version: v1.18.0
name: cluster_info
server: https://172.17.0.30:8443
name: minikube
contexts:
- context:
cluster: minikube
extensions:
- extension:
last-update: Wed, 17 Nov 2021 06:30:03 UTC
provider: minikube.sigs.k8s.io
version: v1.18.0
name: context_info
namespace: default
user: minikube
name: minikube
current-context: minikube
kind: Config
preferences: {}
users:
- name: minikube
user:
client-certificate: /root/.minikube/profiles/minikube/client.crt
client-key: /root/.minikube/profiles/minikube/client.key
# 创建service,默认情况下,Pod 只能通过 Kubernetes 集群中的内部 IP 地址访问。 要使得 hello-node 容器可以从 Kubernetes 虚拟网络的外部访问,你必须将 Pod 暴露为 Kubernetes Service。使用 kubectl expose 命令将 Pod 暴露给公网:
$ kubectl expose deployment hello-node --type=LoadBalancer --port=8080
service/hello-node exposed
# 查看你创建的 Service:
$ kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
hello-node LoadBalancer 10.97.152.31 <pending> 8080:30527/TCP 32s
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 9m22s
# 使服务生效
$ minikube service hello-node
|-----------|------------|-------------|--------------------------|
| NAMESPACE | NAME | TARGET PORT | URL |
|-----------|------------|-------------|--------------------------|
| default | hello-node | 8080 | http://172.17.0.30:30527 |
|-----------|------------|-------------|--------------------------|
* Opening service default/hello-node in default browser...
Minikube Dashboard is not supported via the interactive terminal experience.
Please click the 'Preview Port 30000' link above to access the dashboard.
This will now exit. Please continue with the rest of the tutorial.
X Exiting due to HOST_BROWSER: exit status 1
*
* If the above advice does not help, please let us know:
- https://github.com/kubernetes/minikube/issues/new/choose
更多推荐
所有评论(0)