温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Kubernetes管理的基本教程

发布时间:2021-08-05 09:41:06 来源:亿速云 阅读:153 作者:chen 栏目:云计算

这篇文章主要讲解了“Kubernetes管理的基本教程”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Kubernetes管理的基本教程”吧!

1. 创建Container / Pod##

Kubernetes的编排基本单元是Pod,故而哪怕你只有一个Container,也要创建一个Pod来容纳这个Container.

apiVersion: v1
kind: Pod
metadata:
  name: hello-world # pod资源名称,集群unique的
spec:  # specification of the pod’s contents
  restartPolicy: Never # 运行这个容器一次,然后就结束这个pod
  containers:
  - name: hello # 只是这个container的nickname
    image: "ubuntu:14.04" # image 名, 默认使用Docker Hub
    command: ["/bin/echo","hello”,”world"]

部分解释见上,其中command覆盖了Docker容器的Entrypoint, Command参数(对应于Docker的Cmd)可以使用args来声明:

command: ["/bin/echo"]
    args: ["hello","world"]

创建pod则为:

$ kubectl create -f ./hello-world.yaml --validate # 将会进行验证并且给出WARN,但是出问题的话,依然会创建Pod,会输出WARN信息
pods/hello-world
Container环境变量和变量展开####
apiVersion: v1
kind: Pod
metadata:
  name: hello-world
spec:  # specification of the pod’s contents
  restartPolicy: Never
  containers:
  - name: hello
    image: "ubuntu:14.04"
    env: # 这是一个环境变量
    - name: MESSAGE
      value: "hello world"
    command: ["/bin/sh","-c"] # Kubernetes并不会自动运行shell,需要手动指定
    args: ["/bin/echo \"${MESSAGE}\""] # 这是用到的环境变量展开

如果没有shell我们的环境变量依然可以用$(ENVVAR)来展开。例如:

command: ["/bin/echo"]
    args: ["$(MESSAGE)"]

##2. 查看Pod的状态##

$ kubectl get pods
NAME          READY     STATUS    RESTARTS   AGE
hello-world   0/1       Pending   0          0s

状态如下:

unscheduled - 一开始创建POD,还没选择到节点来运行Pod,然后立即schedule
scheduled - Pod已经被Scheduled,准备在目标节点pull镜像
running - 从镜像启动容器成功, READY列表示多少个容器正常
ExitCode:0 - 正常退出,容器不再运行

##3. 删除Pod##

$ kubectl delete pod hello-world
pods/hello-world

或者 resource/name 格式来删除

$ kubectl delete pods/hello-world
pods/hello-world

会把容器和其输出的日志都删除。

##4. 创建Replication Controller## Replication Controller可以保证『副本数量正确』的Pod在运行,下面简称RC/rc。下面是2副本的Nginx:

apiVersion: v1
kind: ReplicationController # 不再是Pod
metadata:
  name: my-nginx
spec:
  replicas: 2
  template: # 这是一个PodTemplateSpec,下面声明了Pod的规范
    metadata: # 无需声明Pod名称,因为他们由RC自动生成
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80 # 对外开放的端口

##5. 删除Replication Controller##

$ kubectl delete rc my-nginx
replicationcontrollers/my-nginx

Label

Kubernetes使用Lable来分类、识别不同的资源集合,例如Pods和Replication Controllers。 我们可以用app这个key和nginx这个value来读取pods和rc:

$ kubectl get pods -L app
NAME             READY     STATUS    RESTARTS   AGE       APP
my-nginx-afv12   0/1       Running   0          3s        nginx
my-nginx-lg99z   0/1       Running   0          3s        nginx
$ kubectl get rc my-nginx -L app
CONTROLLER   CONTAINER(S)   IMAGE(S)   SELECTOR    REPLICAS   APP
my-nginx     nginx          nginx      app=nginx   2          nginx

也可以使用golang的模板来获取信息

$ kubectl get rc my-nginx -o template --template="{{.spec.selector}}"
map[app:nginx]

6. 创建Service##

下面是一个服务的yaml文件。服务是与Pod松耦合的。可以自由组合。一旦创建完毕就分配一个clusterIP,而对这个clusterIP会有个简单的load balancer.

apiVersion: v1
kind: Service
metadata:
  name: nginxsvc
  labels:
    app: nginx
spec: 
  ports:
  - port: 80 # 访问的地址为 http://clusterIP:80/
    protocol: TCP
  selector: # 意思是由app=nginx的pod来处理
    app: nginx

一个Service背后可以有多个endpoints,来进行处理。

$ kubectl describe svc nginxsvc
Name:          nginxsvc
Namespace:     default
Labels:            app=nginx
Selector:      app=nginx
Type:          ClusterIP
IP:            10.0.116.146
Port:          <unnamed> 80/TCP
Endpoints:     10.245.0.14:80,10.245.0.15:80
Session Affinity:  None
No events.

$ kubectl get ep
NAME         ENDPOINTS
nginxsvc     10.245.0.14:80,10.245.0.15:80

感谢各位的阅读,以上就是“Kubernetes管理的基本教程”的内容了,经过本文的学习后,相信大家对Kubernetes管理的基本教程这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI