Kubernetes使用阿里云docker

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

背景

k8s默认使用gcr.io作为镜像仓库,由于网络原因无法正常访问,或者速度非常慢。我就使用了阿里云docker,来创建自己的私有仓库。

申请阿里云账号

阿里云docker管理界面地址

docker hub加速

使用阿里云加速访问docker hub。访问docker hub官方镜像时进行网络提速 Kubernetes使用阿里云docker_第1张图片

创建命名空间

Kubernetes使用阿里云docker_第2张图片

k8s创建secret

创建访问阿里云docker的secret对象,这里是阿里云docker的账号密码

ALI_DOCKER_REGISTRY_SERVER=https://registry.cn-hangzhou.aliyuncs.com/
ALI_DOCKER_USER=登陆阿里云docker的用户名
ALI_DOCKER_EMAIL=登陆阿里云docker的email
ALI_DOCKER_PASSWORD=登陆阿里云docker的密码
kubectl create secret docker-registry aliyun-docker \
  --docker-server=$ALI_DOCKER_REGISTRY_SERVER \
  --docker-username=$ALI_DOCKER_USER \
  --docker-password=$ALI_DOCKER_PASSWORD \
  --docker-email=$ALI_DOCKER_EMAIL

镜像制作

获取node官方镜像

sudo docker pull node:10 以官方镜像为基础

将官方镜像推到自己仓库

先使用sudo docker images,查看下载的node镜像id,

然后打一个新的tag. sudo docker tag 5a401340b79f registry.cn-hangzhou.aliyuncs.com/xxxxx/node:10

最后推送到自己的阿里云仓库 sudo docker push registry.cn-hangzhou.aliyuncs.com/xxxxx/node:10

如果是私有仓库,要保证已经docker登录了阿里云账号,否则无法推送

制作自己的node应用镜像

应用dockerfile内容如下

FROM registry.cn-hangzhou.aliyuncs.com/xxxxx/node:10
EXPOSE 8080
COPY server.js .
CMD node server.js

应用server.js内容如下

var http = require('http');
var handleRequest = function(request, response) {
  console.log('Received request for URL: ' + request.url);
  response.writeHead(200);
  response.end('Hello World!');
};
var www = http.createServer(handleRequest);
www.listen(8080);

构建应用镜像

sudo docker build --tag registry.cn-hangzhou.aliyuncs.com/xxxxx/hello_world:v0.1 ./

上传到阿里云仓库

sudo docker push registry.cn-hangzhou.aliyuncs.com/xxxxx/hello_world:v0.1

pod容器使用secret

创建pod

pod的yaml内容如下:

apiVersion: v1
kind: Pod
metadata:
  name: helloworld
  labels:
    app: helloworld
spec:
  containers:
    - name: helloworld
      image: registry.cn-hangzhou.aliyuncs.com/xxxxx/hello_world:v0.1
      imagePullPolicy: Always
      ports:
        - containerPort: 8080
  imagePullSecrets:
    - name: aliyun-docker

创建pod,sudo kubectl apply -f helloworld.yaml

访问pod

通过sudo kebectl describe pod helloworld,得到pod的状态和运行在哪个node,以及pod的容器ip。

在部署的node上,curl http://pod容器IP:8080访问,输出 hello world

问题诊断

pod状态

sudo kubectl describe pod helloworld

查看pod的状态以及创建过程等信息

node诊断

sudo kubect get no -o yaml

或者

sudo kubectl describe node xxx

查看node的健康检查等信息

参考资料

阿里云docker hub 拉取私有仓库镜像

转载于:https://my.oschina.net/u/583362/blog/3052071

你可能感兴趣的:(Kubernetes使用阿里云docker)