docker学习笔记(k8s)

缺乏、安全感 2022-07-12 08:57 345阅读 0赞

目录


  1. 1、基本概念
  2. 2、安装使用
  3. 3、常用命令

k8s基本概念


Kubernetes 是Google开源的容器集群管理系统,基于Docker构建一个容器的调度服务,提供资源调度、均衡容灾、服务注册、动态扩缩容等功能套件,目前最新版本为1.0.6;

下面是一张简单的架构图

helloWord.png

几个重要概念:

  • Pod : 在Kubernetes系统中,调度的最小颗粒不是单纯的容器,而是抽象成一个Pod,Pod是一个可以被创建、销毁、调度、管理的最小的部署单元。比如一个或一组容器。
  • Service :Services是真实应用服务的抽象,每一个服务后面都有很多对应的容器来支持,通过Proxy的port和服务selector决定服务请求传递给后端提供服务的容器,对外表现为一个单一访问接口,外部不需要了解后端如何运行,这给扩展或维护后端带来很大的好处。使用nat作为端口转发;
  • Replication Controllers:Replication Controller确保任何时候Kubernetes集群中有指定数量的pod副本(replicas)在运行, 如果少于指定数量的pod副本(replicas),Replication Controller会启动新的Container,反之会杀死多余的以保证数量不变。
  • Labels:Labels是用于区分Pod、Service、Replication Controller的key/value键值对,Pod、Service、 Replication Controller可以有多个label,但是每个label的key只能对应一个value。Labels是Service和Replication Controller运行的基础,他们正是通过labels来选择正确的容器。
  • Cluster : Cluster是安装在物理机或者是虚拟机上用来运行应用的应用的组件;
  • Node : 运行了Kubernetes的Cluster机器被成为节点;

安装使用


master上安装kubernetes


  1. vim /etc/yum.repos.d/virt7-testing.repo
  2. [virt7-testing]
  3. name=virt7-testing
  4. baseurl=http://cbs.centos.org/repos/virt7-testing/x86_64/os/
  5. gpgcheck=0
  6. #注意;这里etcd使用的是yum中的版本;版本号为2.1.1;
  7. @使用最新版本时测试不通过;
  8. yum -y install etcd kubernetes
  9. #修改如下文件
  10. cat vim /etc/kubernetes/config
  11. [root@h0022062 bin]# cat /etc/kubernetes/config
  12. ###
  13. # kubernetes system config
  14. #
  15. # The following values are used to configure various aspects of all
  16. # kubernetes services, including
  17. #
  18. # kube-apiserver.service
  19. # kube-controller-manager.service
  20. # kube-scheduler.service
  21. # kubelet.service
  22. # kube-proxy.service
  23. # logging to stderr means we get it in the systemd journal
  24. KUBE_LOGTOSTDERR="--logtostderr=true"
  25. # journal message level, 0 is debug
  26. KUBE_LOG_LEVEL="--v=0"
  27. # Should this cluster be allowed to run privileged docker containers
  28. KUBE_ALLOW_PRIV="--allow_privileged=false"
  29. # How the controller-manager, scheduler, and proxy find the apiserver
  30. #KUBE_MASTER="--master=http://127.0.0.1:8080"
  31. KUBE_ETCD_SERVERS="--etcd_servers=http://locate:2379"
  32. [root@h0022062 bin]# cat /etc/kubernetes/apiserver
  33. ###
  34. # kubernetes system config
  35. #
  36. # The following values are used to configure the kube-apiserver
  37. #
  38. # The address on the local server to listen to.
  39. KUBE_API_ADDRESS="--address=0.0.0.0"
  40. # The port on the local server to listen on.
  41. KUBE_API_PORT="--port=8080"
  42. # Port minions listen on
  43. KUBELET_PORT="--kubelet_port=10250"
  44. # How the replication controller and scheduler find the kube-apiserver
  45. KUBE_MASTER="--master=http://centos-master:8080"
  46. # Comma separated list of nodes in the etcd cluster
  47. KUBE_ETCD_SERVERS="--etcd_servers=http://localhost:2379"
  48. # Address range to use for services
  49. KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"
  50. # default admission control policies
  51. #KUBE_ADMISSION_CONTROL="--admission_control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota"
  52. # Add your own!
  53. KUBE_API_ARGS=""
  54. #启动服务;
  55. service etcd start
  56. service kube-apiserver start
  57. service kube-controller-manager start
  58. service kube-scheduler start

master上启动节点;


  1. #修改配置文件
  2. [root@h0022062 server]# cat /etc/kubernetes/kubelet
  3. ###
  4. # kubernetes kubelet (minion) config
  5. # The address for the info server to serve on (set to 0.0.0.0 or "" for all interfaces)
  6. KUBELET_ADDRESS="--address=127.0.0.1"
  7. # The port for the info server to serve on
  8. KUBELET_PORT="--port=10250"
  9. # You may leave this blank to use the actual hostname
  10. KUBELET_HOSTNAME="--hostname_override=127.0.0.1"
  11. # location of the api-server
  12. KUBELET_API_SERVER="--api_servers=http://127.0.0.1:8080"
  13. # Add your own!
  14. KUBELET_ARGS=""
  15. #启动各个节点;
  16. service kube-proxy start
  17. service kubelet start
  18. service docker start

Offline


在Kubernetes启动pod的时候;会尝试下载一些镜像;由于网络问题;这些镜像一般下载不了; 需要事先下载好;以便测试;

  1. docker pull gcr.io/google_containers/pause
  2. docker pull gcr.io/google_containers/pause:0.8.0
  3. docker tag gcr.io/google_containers/pause docker.io/kubernetes/pause

HelloWord


  1. #创建pod;
  2. [root@h0022062 server]# kubectl run my-nginx --image=127.0.0.1:5010/centos-nginx --replicas=2 --port=80
  3. CONTROLLER CONTAINER(S) IMAGE(S) SELECTOR REPLICAS
  4. my-nginx my-nginx 127.0.0.1:5010/centos-nginx run=my-nginx 2
  5. [root@h0022062 server]#
  6. [root@h0022062 server]#
  7. #查看已经存在的pod
  8. [root@h0022062 server]# kubectl get pods
  9. NAME READY STATUS RESTARTS AGE
  10. my-nginx-bnmhj 1/1 Running 0 11s
  11. my-nginx-lqkny 1/1 Running 0 11s
  12. #查看replicationcontroller
  13. [root@h0022062 bin]# kubectl get replicationcontroller
  14. CONTROLLER CONTAINER(S) IMAGE(S) SELECTOR REPLICAS
  15. my-nginx my-nginx nginx run=my-nginx 2
  16. #停止pods
  17. [root@h0022062 server]# kubectl stop replicationcontroller my-nginx
  18. replicationcontrollers/my-nginx
  19. #确认是否停止成功
  20. [root@h0022062 server]# kubectl get pods
  21. NAME READY STATUS RESTARTS AGE

HelloWord-实际可以访问的service


  1. [root@h0022062 server]# kubectl get pods
  2. NAME READY STATUS RESTARTS AGE
  3. [root@h0022062 server]# kubectl get services
  4. NAME LABELS SELECTOR IP(S) PORT(S)
  5. kubernetes component=apiserver,provider=kubernetes <none> 192.168.0.1 443/TCP
  6. [root@h0022062 server]# cat pod.yaml
  7. apiVersion: v1
  8. kind: ReplicationController
  9. metadata:
  10. name: mynginx
  11. labels:
  12. name: mynginx
  13. spec:
  14. replicas: 2
  15. template:
  16. metadata:
  17. labels:
  18. app: nginx
  19. spec:
  20. containers:
  21. - name: mynginx
  22. image: 127.0.0.1:5010/centos-nginx
  23. ports:
  24. - containerPort: 80
  25. [root@h0022062 server]# kubectl create -f pod.yaml
  26. replicationcontrollers/mynginx
  27. [root@h0022062 server]# kubectl get pods
  28. NAME READY STATUS RESTARTS AGE
  29. mynginx-3sz2i 1/1 Running 0 1m
  30. mynginx-m821h 1/1 Running 0 1m
  31. #添加服务
  32. [root@h0022062 server]# cat service.json
  33. {
  34. "kind": "Service",
  35. "apiVersion": "v1",
  36. "metadata": {
  37. "name": "my-service"
  38. },
  39. "spec": {
  40. "selector": {
  41. "app": "nginx"
  42. },
  43. "ports": [
  44. {
  45. "protocol": "TCP",
  46. "port": 80,
  47. "targetPort": 80
  48. }
  49. ]
  50. }
  51. }
  52. #启动服务
  53. [root@h0022062 server]# kubectl create -f service.json
  54. #iptables查看nat的映射表
  55. [root@h0022062 server]# iptables -nvL -t nat
  56. 7 420 DNAT tcp -- * * 0.0.0.0/0 10.254.79.222 /* default/my-service: */ tcp dpt:80 to:192.168.77.114:13412
  57. #访问测试;

helloWord.png

  1. #
  2. [root@h0022062 server]# kubectl stop -f pod.yaml
  3. pods/mynginx
  4. #有一个pending;可以使用describe命令查看详情
  5. [root@h0022062 server]# kubectl describe pods/mynginx-3sz2i

常用命令


kubectl create

作用:通过文件创建资源(pod、Replication Controllers、Service)等;支持YAML和JSON格式; 示例:

  1. kubectl create -f ./pod.json

kubectl get

作用:列出资源列表; 示例:

  1. // 显示所有的pods
  2. $ kubectl get pods
  3. //显示replicationcontroller
  4. $ kubectl get replicationcontroller
  5. $ kubectl get rc
  6. //显示service
  7. $ kubectl get service
  8. //显示所有节点
  9. $ kubectl get node
  10. // 显示pod web-pod-13je7 的json
  11. $ kubectl get -o json pod web-pod-13je7
  12. // List one or more resources by their type and names.
  13. $ kubectl get rc/web service/frontend pods/web-pod-13je7

kubectl delete

作用:删除资源;可以使用文件或者是标签来标记删除的资源; 示例:

  1. // Delete a pod using the type and name specified in pod.json.
  2. $ kubectl delete -f ./pod.json
  3. // Delete pods and services with label name=myLabel.
  4. $ kubectl delete pods,services -l name=myLabel
  5. // Delete all pods
  6. $ kubectl delete pods --all

kubectl describe

作用:显示资源的详情;可以用于显示pending状态

示例:

  1. // 显示nodes名称为kubernetes-minion-emt8.c.myproject.internal的详情
  2. $ kubectl describe nodes kubernetes-minion-emt8.c.myproject.internal
  3. //显示pods名称为nginx的详情
  4. $ kubectl describe pods/nginx
  5. // 显示标签为 name=myLabel 的pods
  6. $ kubectl describe po -l name=myLabel

kubectl logs

作用:显示pod内容器的日志;

示例:

  1. #如果是pod内只有一个容器;容器名称可选
  2. kubectl logs mynginx-24aw5
  3. kubectl logs mynginx-24aw5 mynginx

kubectl stop

作用:停止一个资源;

示例:

  1. // Shut down foo.
  2. $ kubectl stop replicationcontroller foo
  3. // Stop pods and services with label name=myLabel.
  4. $ kubectl stop pods,services -l name=myLabel
  5. // Shut down the service defined in service.json
  6. $ kubectl stop -f service.json
  7. // Shut down all resources in the path/to/resources directory
  8. $ kubectl stop -f path/to/resources

欢迎关注公众号:

" class="reference-link">70

发表评论

表情:
评论列表 (有 0 条评论,345人围观)

还没有评论,来说两句吧...

相关阅读