Kubernetes tutorials学习入门

大致流程  

1. Already got a running Kubernetes cluster

2. Deploy containerized applications on top of it

    by create a Kubernetes deployment configuration

3. Check out and explore the application    

4. Expose the app using service

5. Scale the app

6. Update the app


Learn to:

        Deploy a containerized application on a cluster

        Scale the deployment

        Update the containerized application with a new software version

        Debug the containerized application


A Kubernetes cluster consists of two types of resources:

        The Master coordinates the cluste

        Nodes are the workers that run applications


Start with commands:

kubectl cluster-info   查看集群信息

kubectl get pods

Pod: A group of one or more application containers that are relatively tightly coupled (such as Docker or rkt), and some shared resources like the following for those containers.

    Shared storage, as Volumes  | Networking, as a unique cluster IP address  |  Information about how to run each container, such as the container image version or specific ports to use

The containers in a Pod share an IP Address and port space, are always co-located and co-scheduled, and run in a shared context on the same Node.

Pods are the atomic unit on the Kubernetes platform. 

Each Pod is tied to the Node where it is scheduled, and remains there until termination (according to restart policy) or deletion. In case of a Node failure, identical Pods are scheduled on other  available Nodes in the cluster.


Deployment

        A Deployment is responsible for creating and updating instances of your application

kubectl run kubernetes-bootcamp --image=gcr.io/google-samples/kubernetes-bootcamp:v1--port=8080

    Create a new deployment. kubernetes-boocamp is deployment name,  image location (include the full repository url for images hosted outside Docker hub), and can specify a port.

    can use --expose to create service atst

kubectl get deployments

    The DESIRED state is showing the configured number of replicas

    The CURRENT state show how many replicas are running now

    The UP-TO-DATE is the number of replicas that were updated to match the desired (configured) state

    The AVAILABLE state shows how many replicas are actually AVAILABLE to the users


    kubectl get pods/services/deployments

    kubectl describe - show detailed information about a resource

    kubectl logs - print the logs from a container in a pod

    kubectl exec - execute a command on a container in a pod



Node: A worker machine in Kubernetes and may be either a virtual or a physical machine, depending on the cluster.  A Node can have multiple pods, and the Kubernetes master automatically handles scheduling the pods across the Nodes in the cluster by  taking into account the available resources on each Node.

A pod always runs on a node

Every Kubernetes Node runs at least:

    Kubelet, a process responsible for communication between the Kubernetes Master and     the Node; it manages the Pods and the containers running on a machine.

    A container runtime (like Docker, rkt) responsible for pulling the container image from a     registry, unpacking the container, and running the application.

Node overview



Cluster

Explore

kubectl proxy:  command to run a proxy in a second terminal window

      Note: Check the top of the terminal. The proxy was run in a new tab (Terminal 2), and the recent commands were executed the original tab (Terminal 1). The proxy still runs in the second tab, and this allowed our curl command to work using localhost:8001.

export POD_NAME=$(kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}')

echo Name of the Pod: $POD_NAME

curl http://localhost:8001/api/v1/namespaces/default/pods/$POD_NAME/proxy/
    The url is the route to the API of the Pod.

kubectl exec $POD_NAME env    -在容器级别运行命令,如列举环境变量(此处只有一个容器 故忽略了容器名)

kubectl exec -ti $POD_NAME bash  -开启 bash session in the Pod’s container(忽略了容器名)



Expose

Service

kubectl expose deployment/kubernetes-bootcamp --type="NodePort" --port 8080

kubectl describe services/kubernetes-bootcamp   可以看到node port

curl $(minikube ip):$NODE_PORT

kubectl describe deployment  部署会自动给pod生成label 可根据label找pod

kubectl get pods/services -l label

kubectl label pod $POD_NAME app=v1  给pod一个新label


kubectl delete services  之后集群外无法再访问到,但是app还在集群内运行


Service:  An abstraction which defines a logical set of Pods and a policy by which to access them. Services enable a loose coupling between dependent Pods. 

A Service is defined using YAML (preferred) or JSON, like all Kubernetes objects

Services can be exposed in different ways by specifying a type in the ServiceSpec:

    ClusterIP (default) - Exposes the Service on an internal IP in the cluster. This type makes the Service only reachable from within the cluster.

    NodePort - Exposes the Service on the same port of each selected Node in the cluster using NAT. Makes a Service accessible from outside the cluster using <NodeIP>:<NodePort>. Superset of ClusterIP.

    LoadBalancer - Creates an external load balancer in the current cloud (if supported) and assigns a fixed, external IP to the Service. Superset of NodePort.

    ExternalName - Exposes the Service using an arbitrary name (specified by externalName in the spec) by returning a CNAME record with the name. No proxy is used. This type requires v1.7 or higher of kube-dns.

More about the different types of Services:

https://kubernetes.io/docs/tutorials/services/source-ip/

https://kubernetes.io/docs/concepts/services-networking/connect-applications-service/

    Additionally, note that there are some use cases with Services that involve not defining selector in the spec. A Service created without selector will also not create the corresponding Endpoints object. This allows users to manually map a Service to specific endpoints. Another possibility why there may be no selector is you are strictly using type: ExternalName.


Services match a set of Pods using labels and selectors

    Labels are key/value pairs attached to objects and can be used in any number of ways:

        Designate objects for development, test, and production

        Embed version tags

        Classify an object using tags


Services and labels

Scaling

kubectl scale deployments/kubernetes-bootcamp --replicas=4

    get deployments 可看到变化

    curl访问服务时 service会分流至不同的pod


Scaling is accomplished by changing the number of replicas in a Deployment

    Note: Kubernetes also supports autoscaling of Pods, but it is outside of the scope of this tutorial

Once you have multiple instances of an Application running, you would be able to do Rolling updates without downtime



Update

Rolling updates allow the following actions:

    Promote an application from one environment to another (via container image updates)

    Rollback to previous versions

    Continuous Integration and Continuous Delivery of applications with zero downtime

kubectl set image deployment/kubernetes-bootcamp image (followed by the deployment name and the new image version)

kubectl rollout undo deployments/kubernetes-bootcamp  -roll back to our previously working version   上面set image 如果image不存在 可执行此命令



最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,755评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,369评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,799评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,910评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,096评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,159评论 3 411
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,917评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,360评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,673评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,814评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,509评论 4 334
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,156评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,882评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,123评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,641评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,728评论 2 351