K8S k8s(4)__启动方式 发表于 2022-09-02 浏览量 530 没有评论 # K8S启动容器有多种方式 Pod为单位:一个或多个容器 ReplicationController方式,能够保证容器的数量 Deployment方式,能够保证容器的数量,并能简易的实现升级部署 # 镜像仓库 ``` hub-mirror.c.163.com/library/registry docker run -d --net=host -v /usr/local/registry/data/:/var/lib/registry hub-mirror.c.163.com/library/registry ``` # 配置使用http的方式 ``` cat /etc/docker/daemon.json { "registry-mirrors": ["http://192.168.237.50:5000"], "insecure-registries":["http://192.168.237.50:5000"] } ``` # Kubernetes启动容器 ``` cat create.yml apiVersion: v1 kind: ReplicationController # RC(ReplicationController)模式启动 metadata: name: nginx spec: replicas: 2 # 容器的数量 template: metadata: name: nginx labels: app: nginx spec: containers: - name: mynginx imagePullPolicy: Always image: 192.168.237.50:5000/shijiange:nginx ``` # Node关于镜像的下载策略 Always:每次都下载最新的镜像 IfNotPresent:当本地没有的时候去下载镜像 Never:只使用本地镜像,从不下载 # K8S创建容器和查看容器 ``` kubectl --server=192.168.237.50:8080 create -f create.yml kubectl --server=192.168.237.50:8080 get rc kubectl --server=192.168.237.50:8080 get pods kubectl --server=192.168.237.50:8080 describe pod nginx # 可显示容器的详细信息,用于排查问题 kubectl --server=192.168.237.50:8080 delete rc nginx ``` - 一开始用K8S创建容器会有问题 ``` k8s.gcr.io/pause:3.1 # kubelet依赖pause这个镜像 docker search pause docker pull kubernetes/pause docker tag kubernetes/pause k8s.gcr.io/pause:3.1 ``` - pause推到自己的镜像仓库 ``` docker tag docker.io/kubernetes/pause 192.168.237.50:5000/pause:3.1 docker push 192.168.237.50:5000/pause:3.1 ``` # K8s相对于普通容器的优点 - 保证容器的数量 移除容器`docker rm -f xxx`, 移除后观察容器,会自动启动容器 - 能够实现弹性伸缩 `kubectl scale rc nginx --replicas=4` 可以指定容器的数量,会启动多个,网络没有冲突的话,可以在一台Node上启动多个一样的容器 - 删除rc ``` kubectl delete -f create.yml # 两者随便一个都可以,一样的效果,删除是会慢一点,因为它要确保没有访问才能删除 kubectl delete rc nginx ``` # K8S POD说明 Node是启动容器的资源,Pod是实际运行的实例 一个Pod -> 多个容器(不会拆分运行) ``` cat create.yml apiVersion: v1 kind: ReplicationController metadata: name: nginx-redis spec: replicas: 1 template: metadata: name: nginx-redis labels: app: nginx-redis spec: containers: - name: mynginx imagePullPolicy: Always image: 192.168.237.50:5000/shijiange:nginx - name: myredis imagePullPolicy: Always image: 192.168.237.50:5000/shijiange:redis ``` - 观察一个Pod,是否有跑着两个容器,是否在同一个Node # K8s默认分配Pod K8s默认分配Pod到Node是比较随机的,会挑比较空的分配 可以通过配置把Pod分配到指定的Node - 给Node添加标识 ``` kubectl --server=192.168.237.50:8080 get node kubectl --server=192.168.237.50:8080 label nodes xxx apptype=nginx kubectl --server=192.168.237.50:8080 get nodes --show-labels ``` - 分配Pod到指定Node ``` apiVersion: v1 kind: ReplicationController metadata: name: nginx-redis spec: replicas: 1 template: metadata: name: nginx-redis labels: app: nginx-redis spec: containers: - name: mynginx imagePullPolicy: Always image: 192.168.237.50:5000/shijiange:nginx - name: myredis imagePullPolicy: Always image: 192.168.237.50:5000/shijiange:redis nodeSelector: apptype: nginx ```