一分钟教你快速部署Kubernetes应用
Posted 分布式实验室
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一分钟教你快速部署Kubernetes应用相关的知识,希望对你有一定的参考价值。
Pod是节点上的最小的部署单元。它是一组必须一起运行的容器。一般来说,但不是必须的,Pod通常包含一个容器。
Service用来定义一组逻辑上存在关系的Pod以及访问它们的相关策略。
Volume是Pod里所有容器都能访问的目录。
Namespace是由物理集群支撑的虚拟集群。
ReplicaSet确保在给定时间运行着特定数量的Pod副本
Deployment用来将当前状态变更到预期状态
StatefulSet用来控制部署顺序以及卷的访问等等。
DaemonSet用来在集群的所有节点或者特定节点运行Pod的拷贝。
Job用来执行一些任务并且在成功完成工作之后或者在给定时间之后退出。
kube-apiserver:整个集群的单点管理点。API server实现了RESTful的接口,用于和工具以及库函数的通信。kubectl命令直接和API server交互。
kube-controller-manager:通过管理不同类型的控制器来规范集群的状态。
kube-scheduler:在集群里的可用节点上调度工作负载。
kubelet是节点和Kubernetes Master之间的通信接口。
kube-proxy是网络路由,它将每个节点上通过Kubernetes API定义的服务暴露出去。它还能够执行简单的TCP和UDP的流转发。
$ minikube start
Starting local Kubernetes v1.10.0 cluster...
Starting VM...
Getting VM IP address...
Moving files into cluster...
Setting up certs...
Connecting to cluster...
Setting up kubeconfig...
Starting cluster components...
Kubectl is now configured to use the cluster.
Loading cached images from config file.
$ kubectl version
Client Version: version.Info{Major:"1", Minor:"9", GitVersion:"v1.9.1", GitCommit:"3a1c9449a956b6026f075fa3134ff92f7d55f812", GitTreeState:"clean", BuildDate:"2018-01-04T20:00:41Z", GoVersion:"go1.9.2", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"10", GitVersion:"v1.10.0", GitCommit:"fc32d2f3698e36b93322a3465f63a14e9f0eaead", GitTreeState:"clean", BuildDate:"2018-03-26T16:44:10Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"linux/amd64"}
Voting-App:应用前端,用Python编写,用户使用它来投票
Redis:内存内数据库,作为实时存储使用
Worker:.Net服务,从Redis里获得投票并存储到Postgres数据库里
DB:PostgreSql数据库,用作数据库。
Result-App:应用前端,用Node.js编写,展示投票结果。
Git clone并且cd到投票应用程序的代码库里。
apiVersion: v1
kind: Service
metadata:
name: result
spec:
type: NodePort
ports:
- name: "result-service"
port: 5001
targetPort: 80
nodePort: 31001
selector:
app: result
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: result
spec:
replicas: 1
template:
metadata:
labels:
app: result
spec:
containers:
- image: dockersamples/examplevotingapp_result:before
name: result
$ kubectl create -f k8s-specifications/
deployment "db" created
service "db" created
deployment "redis" created
service "redis" created
deployment "result" created
service "result" created
deployment "vote" created
service "vote" created
deployment "worker" created
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
db-86b99d968f-s5pv7 1/1 Running 0 1m
redis-659469b86b-hrxqs 1/1 Running 0 1m
result-59f4f867b8-cthvc 1/1 Running 0 1m
vote-54f5f76b95-zgwrm 1/1 Running 0 1m
worker-56578c48f8-h7zvs 1/1 Running 0 1m
$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
db ClusterIP 10.109.241.59 <none> 5432/TCP 2m
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 23m
redis ClusterIP 10.102.242.148 <none> 6379/TCP 2m
result NodePort 10.106.7.255 <none> 5001:31001/TCP 2m
vote NodePort 10.103.28.96 <none> 5000:31000/TCP 2m
# 启动Minikube服务器
$ minikube start
# 得到Minikube IP
$ minikube ip
$ kubectl version #得到kubectl版本
$ kubectl cluster-info #得到集群信息
$ kubectl create -f ./file.yml
$ kubectl create -f ./file1.yml -f ./file2.yaml
$ kubectl create -f ./dir
$ kubectl create -f http://www.fpaste.org/279276/48569091/raw/
# 列出命名空间里的所有服务
$ kubectl get services
# 列出所有命名空间里的所有Pod
$ kubectl get pods --all-namespaces
# 列出命名空间里的所有Pod,并提供详细信息
$ kubectl get pods -o wide
# 列出特定的复制控制器
$ kubectl get rc <rc-name>
# 列出带有标签env=production的所有pod
$ kubectl get pods -l env=production
$ kubectl get services --sort-by=.metadata.name
$ kubectl label pods <pod-name> new-label=awesome
$ kubectl annotate pods <pod-name> icon-url=http://goo.gl/XXBTWq
$ kubectl delete pod pingredis-XXXXX
$ kubectl scale --replicas=3 deployment nginx
$ kubectl logs <pod-name>
# 运行tail -f 得到日志输出
$ kubectl logs -f <pod-name>
# 以交互shell运行pod
$ kubectl run -i --tty busybox --image=busybox -- sh
# 连接到运行着的容器里
$ kubectl attach <podname> -i
# 将Pod的端口转发到本地机器
$ kubectl port-forward <podname> <local-and-remote-port>
# 将端口转发到服务
$ kubectl port-forward <servicename> <port>
# 在已有pod里运行命令(仅有1个容器的情况下)
$ kubectl exec <pod-name> -- ls /
# 在已有pod里运行命令(多个容器的情况下)
$ kubectl exec <pod-name> -c <container-name> -- ls /
$ kubectl exec busybox -- nslookup kubernetes
$ kubectl exec busybox -- nslookup kubernetes.default
$ kubectl exec busybox -- nslookup kubernetes.default.svc.cluster.local
$ kubectl run nginx --image=nginx:1.9.12
$ kubectl expose deployment nginx --port=80 --type=LoadBalancer
以上是关于一分钟教你快速部署Kubernetes应用的主要内容,如果未能解决你的问题,请参考以下文章
弹幕网站很复杂?教你10分钟在华为云鲲鹏弹性云服务器上部署好!