容器编排Kubernetes,是课程第九章的内容

1.Kubenetes简介

k8s

1.1为什么简写是k8s

因为kubernetes,k和s之间一共有8个字母

2.Minikube快速搭建K8S单节点环境

2.1配置K8S环境

  1. https://github.com/kelseyhightower/kubernetes-the-hard-way 这个是k8s的从头开始安装的方法
  2. https://github.com/kubernetes/minikube 这个是在本地跑一个最简单的k8s,只有一个节点。类似vagrant,是要借助virtual box这种的

2.2安装kubetcl

https://kubernetes.io/docs/tasks/tools/install-kubectl/

2.3minikube

minikube相关命令:

  1. minikube start,启动minikube节点
  2. minikube ssh,连接到minikube内部
  3. minikube stop

2.4kubectl

kubectl context:
里面存着一个kubernetes集群的信息,比如集群的host。kubectl下可能有多个context,我们可以通过context去管理多个k8s集群

相关命令:

  1. kubectl config view
  2. kubectl config get-contexts,得到现在是用的哪个context
  3. kubectl cluster-info,得到集群信息
  4. kubectl version

3.K8S最小调度单位Pod

k8s不对容器进行操作,因为最小单位是pod。同一个pod里面的容器,是在一个namespace下的,这里的namespace包括所有的namespace(如network namespace)

相关命令:

  • kubectl create -f pod_nginx.yml,创建pod
  • kubectl delete -f pod_nginx.yml,删除pod
  • kubectl get pods,查看pods的情况
  • kubectl get pods -o wide,加了wide参数之后,会显示更多信息
  • 上面的命令,可以看到pod里面的容器具体是在哪个机器上的,要进入这个容器,我们先ssh到这个机器上,然后docker exec -it container_name sh,
  • kubectl describe pods nginx,查看pods的具体信息
  • kubectl port-forward nginx 8080:80,映射本地的8080端口和pod的80端口,nginx是pod name,但是要注意的是,这个命令一旦ctrl+c退出,映射就结束了。8080端口是运行了kubectl的机器的端口,不是pod所在的容器的端口。

pod_nginx.yml:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  containers:
  - name: nginx
    image: nginx #使用的镜像
    ports:
    - containerPort: 80

NOTICE

kubectl create之后,可能pod会一直不启动,这个时候可以通过minikube logs查看错误日志。我遇到的问题的是不能拉取镜像,是要翻墙的网址。 解决这个问题可以在启动minikube的时候,指定代理:

1
2
minikube start --docker-env=HTTP_PROXY=http://$YOURPROXY:PORT \
                 --docker-env=HTTPS_PROXY=https://$YOURPROXY:PORT

参考资料:https://github.com/kubernetes/minikube/blob/master/docs/http_proxy.md

4.ReplicaSet和ReplicationController

ReplicaSet是新一代的ReplicationController。这里的replica就是我们之前docker里面遇到的是一样的。也是多个,这里就是多个pod。下面简称rc或者rs

相关命令:

  • kubectl create -f rc_nginx.yml,创建replicationController,rc_nginx.yml见docker_labs
  • kubectl get rc,可以查看rc的情况
  • kubectl get pods,查看pod的情况
  • kubectl delete pods nginx-6cznp,删除这个一个pod
  • kubectl scale rc nginx –replicas=2,修改rc的pod数量
  • kubectl delete rc nginx,删除replicationController -kubectl create -f rs_nginx.yml,创建replicaSet,ns_nginx.yml见docker-labs
  • kubectl get rs,查看rs的情况
  • kubectl scale rs nginx –replicas=2,对rs进行scale

rc_nginx.yml:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
apiVersion: v1
kind: ReplicationController