3.k8s启动管理容器


01_K8S启动容器实战
K8S启动容器有多种方式:
Pod为单位:一个或多个容器
ReplicationController方式,能够保证容器的数量
Deployment方式,能够保证容器的数量,并能简易的实现升级部署

镜像仓库:
[root@master ~]# docker pull hub-mirror.c.163.com/library/registry
[root@master ~]# 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://hub-mirror.c.163.com/","http://10.0.0.230"],
"insecure-registries":["http://10.0.0.230"]
}
Kubernetes启动容器:create.yml
[root@master ~]# cat create.yml

apiVersion: v1
kind: ReplicationController
metadata:
  name: nginx
spec:
  replicas: 2
  template:
    metadata:
      name: nginx
      labels:
        app: nginx
    spec:
      containers:
      - name: mynginx
        imagePullPolicy: Always
        image: 10.0.0.230/shijiange/shijiange:nginx

Node关于镜像的下载策略:
1.Always:每次都下载最新的镜像
2.IfNotPresent:当本地没有的时候去下载镜像
3.Never:只使用本地镜像,从不下载

K8S创建容器和查看容器:
1.kubectl --server=192.168.237.50:8080 create -f create.yml
2.kubectl --server=192.168.237.50:8080 get rc
3.kubectl --server=192.168.237.50:8080 get pods
4.kubectl --server=192.168.237.50:8080 describe pod nginx
5.kubectl --server=192.168.237.50:8080 delete rc nginx

[root@master ~]# kubectl create -f create.yml
replicationcontroller/nginx created
[root@master ~]# kubectl get rc
NAME DESIRED CURRENT READY AGE
nginx 2 2 0 50s
[root@master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-9dvrp 0/1 ContainerCreating 0 96s
nginx-g2hhm 0/1 ContainerCreating 0 96s
[root@master ~]# kubectl describe pod nginx-9dvrp
Warning FailedCreatePodSandBox 4m22s (x397 over 5h20m) kubelet, node1 Failed create pod sandbox: rpc error: code = Unknown desc = failed pulling image "k8s.gcr.io/pause:3.1": Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

一开始用K8S创建容器会有问题:
kubelet依赖pause这个基础镜像k8s.gcr.io/pause:3.1,master和node节点都找到pause镜像并tag
# docker search pause
# docker pull kubernetes/pause

# docker tag kubernetes/pause k8s.gcr.io/pause:3.1
# docker images|grep pause
kubernetes/pause latest f9d5de079539 5 years ago 240kB
k8s.gcr.io/pause 3.1 f9d5de079539 5 years ago 240kB

查看:
[root@node1 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
491237c68e82 k8s.gcr.io/pause:3.1 "/pause" 3 minutes ago Up 3 minutes k8s_POD_nginx-g2hhm_default_001af498-8a87-11ea-b3f3-000c290f6f2b_0
746423191a83 k8s.gcr.io/pause:3.1 "/pause" 3 minutes ago Up 3 minutes k8s_POD_nginx-9dvrp_default_00190c23-8a87-11ea-b3f3-000c290f6f2b_0
[root@master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-9dvrp 1/1 Running 0 5h39m
nginx-g2hhm 1/1 Running 0 5h39m
[root@node1 ~]# docker ps -a #两个nginx容器都跑到node上
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
476163d02abc 10.0.0.230/shijiange/shijiange "sjgrun" About a minute ago Up About a minute k8s_mynginx_nginx-g2hhm_default_001af498-8a87-11ea-b3f3-000c290f6f2b_0
3880616b2b99 10.0.0.230/shijiange/shijiange "sjgrun" About a minute ago Up About a minute k8s_mynginx_nginx-9dvrp_default_00190c23-8a87-11ea-b3f3-000c290f6f2b_0
491237c68e82 k8s.gcr.io/pause:3.1 "/pause" 7 minutes ago Up 7 minutes k8s_POD_nginx-g2hhm_default_001af498-8a87-11ea-b3f3-000c290f6f2b_0
746423191a83 k8s.gcr.io/pause:3.1 "/pause" 7 minutes ago Up 7 minutes k8s_POD_nginx-9dvrp_default_00190c23-8a87-11ea-b3f3-000c290f6f2b_0
测试nginx:
[root@node1 ~]# docker exec -it 476163d02abc bash
[root@nginx-g2hhm /]# curl 127.0.0.1

附:pause推到自己的镜像仓库备用:
[root@master ~]# docker tag k8s.gcr.io/pause:3.1 10.0.0.230/shijiange/pause:3.1
[root@master ~]# docker push 10.0.0.230/shijiange/pause:3.1


-------------------------------------
02_K8S容器的高可用和伸缩实战
K8s的ReplicationController相对于普通容器的优点:
1. 保证容器的数量
2. 能够实现弹性伸缩

容器数量的保证:
1. 移除容器docker rm -f
2. 移除后观察容器,会自动启动容器

弹性伸缩:
可以指定容器的数量,会启动多个
网络没有冲突的话,可以在一台Node上启动多个一样的容器
[root@master ~]# kubectl scale rc nginx --replicas=3
[root@master ~]# kubectl get rc
NAME DESIRED CURRENT READY AGE
nginx 3 3 3 5h53m
[root@master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-9dvrp 1/1 Running 0 5h53m
nginx-g2hhm 1/1 Running 0 5h53m
nginx-zbt4h 1/1 Running 0 29s

删除rc:
[root@master ~]# kubectl delete -f create.yml
[root@master ~]# kubectl delete rc nginx


-------------------------------------
03_K8S的Pod概念实战讲解
K8S POD说明
1. Node是启动容器的资源,Pod是实际运行的实例
2. 一个Pod -> 多个容器(不会拆分运行)
K8S启动多个容器create.yml
[root@master ~]# 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: 10.0.0.230:5000/shijiange:nginx
      - name: myredis
        imagePullPolicy: Always
        image: 10.0.0.230:5000/shijiange:redis

启动容器:
# kubectl --server=xxx:8080 create -f create.yml
[root@master ~]# kubectl create -f create.yml
观察一个Pod,是有跑着两个容器,是在同一个Node(但是在随机node上,即随机宿主机):
[root@master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-redis-76t7w 2/2 Running 0 46s
[root@node1 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTSNAMES
f29d016fda36 10.0.0.230/shijiange/shijiange "sjgrun" 15 seconds ago Up 14 secondsk8s_myredis_nginx-redis-76t7w_default_ad98481f-8aba-11ea-9cdf-000c290f6f2b_0
1e73bd7922f7 10.0.0.230/shijiange/shijiange "sjgrun" 34 seconds ago Up 33 secondsk8s_mynginx_nginx-redis-76t7w_default_ad98481f-8aba-11ea-9cdf-000c290f6f2b_0
d81159865c65 k8s.gcr.io/pause:3.1 "/pause" 35 seconds ago Up 33 secondsk8s_POD_nginx-redis-76t7w_default_ad98481f-8aba-11ea-9cdf-000c290f6f2b_0


---------------------------------------
04_K8S把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

[root@master ~]# kubectl label nodes master apptype=nginx
error: 'apptype' already has a value (nginx), and --overwrite is false
[root@master ~]# kubectl get nodes --show-labels
NAME STATUS ROLES AGE VERSION LABELS
master NotReady <none> 18h v1.13.12 apptype=nginx,beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/hostname=master
node1 Ready <none> 18h v1.13.12 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/hostname=node1

分配Pod到指定Node(这里的master节点):
[root@master ~]# 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: 10.0.0.230/shijiange/shijiange:nginx
      - name: myredis
        imagePullPolicy: Always
        image: 10.0.0.230/shijiange/shijiange:redis
      nodeSelector:
        apptype: nginx

[root@master ~]# kubectl create -f create.yml
[root@master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-redis-rlffj 2/2 Running 0 74s
[root@master ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d4ae53cffcb1 10.0.0.230/shijiange/shijiange "sjgrun" 10 seconds ago Up 10 seconds k8s_myredis_nginx-redis-rlffj_default_3c2b51d6-8abd-11ea-9cdf-000c290f6f2b_0
55f70e8440e6 10.0.0.230/shijiange/shijiange "sjgrun" 11 seconds ago Up 10 seconds k8s_mynginx_nginx-redis-rlffj_default_3c2b51d6-8abd-11ea-9cdf-000c290f6f2b_0
731a416ec778 k8s.gcr.io/pause:3.1 "/pause" 13 seconds ago Up 11 seconds k8s_POD_nginx-redis-rlffj_default_3c2b51d6-8abd-11ea-9cdf-000c290f6f2b_0

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM