2019独角兽企业重金招聘Python工程师标准>>>
背景
k8s默认使用gcr.io作为镜像仓库,由于网络原因无法正常访问,或者速度非常慢。我就使用了阿里云docker,来创建自己的私有仓库。
申请阿里云账号
阿里云docker管理界面地址
docker hub加速
使用阿里云加速访问docker hub。访问docker hub官方镜像时进行网络提速
创建命名空间
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 拉取私有仓库镜像