Pod特点

  • 最小部署单元
  • 一组容器的集合
  • 一个Pod中的容器共享网络命令空间
  • Pod是短暂的

Pod容器分类

  1. infrastructure container 基础容器
    作用:维护整个Pod网络空间。
 #在node节点查看
 cat /opt/kubernetes/cfg/kubelet

在这里插入图片描述

#每次创建Pod时候就会创建,与Pod对应,对于用户是透明的
docker ps

在这里插入图片描述

  1. initcontainers 初始化容器
    先于业务容器开始执行,原先Pod中容器是并行开启,现在进行了改进

  2. container 业务容器
    并行启动
    在官网查看:https://kubernetes.io/docs/concepts/workloads/pods/init-containers/
    在这里插入图片描述

镜像拉取策略(imagePullPolicy)

  1. IfNotPresent:默认值,镜像在宿主机上不存在时才拉取
  2. Always:每次创建Pod都会重新拉取一次镜像
  3. Never:Pod永远不会主动拉取这个镜像
#示例
kubectl apply -f - <<EOF
apiVersion: v1
kind: Pod
metadata:
  name: private-image-test-1
spec:
  containers:
    - name: uses-private-image
      image: $PRIVATE_IMAGE_NAME
      imagePullPolicy: Always
      command: [ "echo", "SUCCESS" ]
EOF

查看已创建资源的镜像拉取策略

kubectl edit deployment/nginx

在这里插入图片描述

创建一个Pod示例资源

cd demo/
vim pod1.yaml
kubectl create -f pod1.yaml
apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
    - name: nginx
      image: nginx
      imagePullPolicy: Always
      command: [ "echo", "SUCCESS" ]
  • 查看资源发现运行失败
    在这里插入图片描述
  • 主要原因是:是因为命令启动冲突
vim pod1.yaml
#删除 command: [ "echo", "SUCCESS" ]
#同时更改一下版本
image: nginx:1.14
#删除原有的资源
kubectl delete -f pod1.yaml 
#更新资源
kubectl apply -f pod1.yaml 
kubectl get pods

在这里插入图片描述

  • 查看分配节点
 kubectl get pods -o wide

在这里插入图片描述

  • 在结点查看头部信息
curl -I 172.17.71.5

在这里插入图片描述

创建Harbor私有仓库及操作

  1. 安装Harbor
  1. node节点配置连接私有仓库(注意后面的逗号要添加)
    在这里插入图片描述
  2. 重启docker服务
systemctl restart docker
#登录harbor私有仓库
docker login 192.168.18.80
Username: admin  
Password:     //输入密码Harbor12345
  1. 下载Tomcat镜像进行推送
docker pull tomcat

[Using default tag: latest
latest: Pulling from library/tomcat
dc65f448a2e2: Pull complete 
346ffb2b67d7: Pull complete 
dea4ecac934f: Pull complete 
8ac92ddf84b3: Pull complete 
d8ef64070a18: Pull complete 
6577248b0d6e: Pull complete 
576c0a3a6af9: Pull complete 
6e0159bd18db: Pull complete 
8c831308dd9e: Pull complete 
c603174def53: Pull complete 
Digest: sha256:e895bcbfa20cf4f3f19ca11451dabc166fc8e827dfad9dd714ecaa8c065a3b18
Status: Downloaded newer image for tomcat:latest
docker.io/library/tomcat:latest
  1. 将其上传至私有仓库
#推送格式
docker tag SOURCE_IMAGE[:TAG] 192.168.195.80/project/IMAGE[:TAG]
#打标签
docker tag tomcat 192.168.18.80/cz_project/tomcat
//推送成功
docker push 192.168.18.80/cz_project/tomcat
#进行进项下载问题就会出现,需要登录才能下载
#原因:缺少仓库的凭据
[root@localhost ~]# docker pull 192.168.18.80/cz_project/tomcat
Using default tag: latest
Error response from daemon: pull access denied for 192.168.195.80/project/tomcat,
repository does not exist or may require 'docker login': 
denied: requested access to the resource is denied

Tomcat镜像问题

  • 因为Tomcat版本有所不同则会导致登录页面出现404的现象,推荐使用8.0.52版本。

  • 在node节点上拉取镜像

docker pull tomcat:8.0.52
  • 在master编写yaml文件
vim tomcat-deployment.yaml

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: my-tomcat
spec:
  replicas: 2
  template:
    metadata:
      labels:
        app: my-tomcat
    spec:
      containers:
      - name: my-tomcat
        image: docker.io/tomcat:8.0.52
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: my-tomcat
spec:
  type: NodePort
  ports:
  - port: 8080
    targetPort: 8080
    nodePort: 31111
  selector:
    app: my-tomcat
  • 创建tomcat资源
kubectl create -f tomcat-deployment.yaml
#速度很快,是因为本地有tomcat镜像
kubectl get pods
kubectl get svc

在这里插入图片描述

  • 测试网页
  • 输入:http://192.168.18.20:31111/
  • 输入:http://192.168.18.30:31111/
    在这里插入图片描述
    在这里插入图片描述
  • 如果遇到处于Terminating状态的无法删除的资源如何处理?
  • 这种情况下可以使用强制删除命令:
kubectl delete pod [pod name] --force --grace-period=0 -n [namespace]

对私有仓库的镜像下载与访问

  • node1上操作(之前登陆过harbor仓库的节点)
#镜像打标签
docker tag tomcat:8.0.52 192.168.18.80/cz_project/tomcat
#上传镜像到harbor
docker push 192.168.18.80/cz_project/tomcat
#查看登陆凭据(不能自动转行)
cat .docker/config.json |base64 -w 0
ewoJImF1dGhzIjogewoJCSIxOTIuMTY4LjE5NS44MCI6IHsKCQkJImF1dGgiOiAiWVdSdGFXNDZTR0Z5WW05eU1USXpORFU9IgoJCX0KCX0sCgkiSHR0cEhlYWRlcnMiOiB7CgkJIlVzZXItQWdlbnQiOiAiRG9ja2VyLUNsaWVudC8xOS4wMy41IChsaW51eCkiCgl9Cn0=
  • 在Master上操作
#创建secret资源
vim registry-pull-secret.yaml
apiVersion: v1
kind: Secret
metadata:
  name: registry-pull-secret
data:
  .dockerconfigjson: ewoJImF1dGhzIjogewoJCSIxOTIuMTY4LjE5NS44MCI6IHsKCQkJImF1dGgiOiAiWVdSdGFXNDZTR0Z5WW05eU1USXpORFU9IgoJCX0KCX0sCgkiSHR0cEhlYWRlcnMiOiB7CgkJIlVzZXItQWdlbnQiOiAiRG9ja2VyLUNsaWVudC8xOS4wMy41IChsaW51eCkiCgl9Cn0=
type: kubernetes.io/dockerconfigjson
kubectl create -f registry-pull-secret.yaml
#查看secret资源
kubectl get secret

创建资源从harbor中下载镜像

vim tomcat-deployment.yaml

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: my-tomcat
spec:
  replicas: 2
  template:
    metadata:
      labels:
        app: my-tomcat
    spec:
      imagePullSecrets:
      - name: registry-pull-secret   #需要修改
      containers:
      - name: my-tomcat
        image: 192.168.18.80/project/tomcat  #需要修改
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: my-tomcat
spec:
  type: NodePort
  ports:
  - port: 8080
    targetPort: 8080
    nodePort: 31111
  selector:
    app: my-tomcat
kubectl create -f tomcat-deployment.yaml 
  • 登录私有仓库,发现镜像被下载了2次
    在这里插入图片描述
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐