目录
安装k8s集群
安装JFrog Container Registry
k8s 中使用token 完成私有容器镜像仓库的鉴权
程序部署
参见
首先学习k8s ,我们手里面得有集群,关于集群的搭建,其实一直卡了我很久,不说高可用集群,就连单机的集群,也是云里雾里,虽说知道都需要安装哪些模块,模块的作用是什么,但是真正参照视频教程里面的安装思路,有会遇到各种坑,最终因为不知道为什么,而安装失败,痛定思痛,我找到了k8s 中文社区的一篇文章,参照该文档,加上自己的总结,成功部署了k8s 到本地的开发环境的最小生态。原文地址连接如下:https://www.kubernetes.org.cn/5650.html
但是在安装中需要有几点修改,
第一点是给各个master和node指定hostname
hostnamectl set-hostname "master"
hostnamectl set-hostname "node1"
hostnamectl set-hostname "node2"
之后配置hosts
vim /etc/hosts
master 192.168.99.101
node1 192.168.99.102
node2 192.168.99.103
第二点设置时区 和同步时间
yum install ntp -y
sudo timedatectl set-timezone 'Asia/Shanghai'
ntpdate 0.asia.pool.ntp.org
第三点创建 ./kubeadm-config.yaml 的时候出现了问题,导致我们在部署pod 的时候,失败,查看pkubectl describe pod podname 发现对应节点间网络不通畅,我的解决办法是使用init 直接追加参数的方式:
kubeadm init --kubernetes-version=1.15.1 \
--apiserver-advertise-address=192.168.99.101 \
--image-repository registry.cn-hangzhou.aliyuncs.com/google_containers \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16
第四点是当我们创建的pod 我们想要使用 nodePort service 时导致计时所有的node都监听了指定的端口,但是只有pod的真实宿主机能够提供对外访问的能力,解决办法是给master 和node 的各个docker添加路由功能
vim /usr/lib/systemd/system/docker.service
添加
ExecStartPost=/sbin/iptables -I FORWARD -s 0.0.0.0/0 -j ACCEPT
当我们使用dashboard的时候需要我们输入token使用该命令获取
kubectl -n kube-system describe $(kubectl -n kube-system get secret -n kube-system -o name |grep namespace) | grep token
到此为止我们的k8s 集群应该已经能够成功运行pod了。
剩下的工作时就使用dockerFile 创建镜像,推送到我们的私有镜像容器仓库,但是我们还没所以进行docekr容器上安装,我使用的是 JFrog container registry
mkdir -p /etc/artifactory/var/etc/
cd /etc/artifactory/var/etc/
touch ./system.yaml
chown -R 1030:1030 /etc/artifactory/var
chmod -R 777 /etc/artifactory/var
docker run --name artifactory-jcr -v /etc/artifactory/var/:/var/opt/jfrog/artifactory -d -p 8081:8081 -p 8082:8082 docker.bintray.io/jfrog/artifactory-jcr:latest
我们就有我们自己的容器镜像仓库了,默认账号密码 admin password
我们进入ip:8081登录账号密码进行相关设置
仓库配置好之后我们在使用docker 进行容器镜像的推送之前需要配置到我们的/etc/docker/daemon.json,art.local 配置为我们私有镜像仓库的宿主机ip
"insecure-registries": [
"art.local:8081"
]
之后进行docker 的重启
# Restart Docker
systemctl daemon-reload
systemctl enable docker
systemctl restart docker
但是在推送之前我们还需要进行登录鉴权,鉴权成功后才能进行容器镜像的推送
docker login art.local:8081
###会出现让输入用户名密码的选项
之后就可以推送到我们的仓库了
###打包镜像的时候就应该直接指定tag 为我们远端的了
docker image build -t art.local:8081/docker-local/eruka-server:1.0 .
###推送
docker push art.local:8081/docker-local/eruka-server:1.0
关于打包和部署的话,我已经完成了spring cloud 基本服务组件的打包进行 service部署文件 应用部署文件,请大家参阅,但是有一个地方需要明确提出来,就是我们k8s 的docker如何进行自动鉴权去私有镜像仓库拉去呢?那就需要我们提前给让容器知道我们的username 和password 然后返回我们token 供我们使用具体命令如下
kubectl create secret docker-registry [token-name] --docker-server=[私有镜像地址] --docker-username=admin --docker-password=[password] --docker-email=[[email protected]]
生成之后直接在部署文件中使用
imagePullSecrets:
- name: domain.key
关于服务的部署,参见weifuwu的git 仓库,值得说的是使用eruake-server 时的解决方案,使用
StatefulSet 的handless 以及默认的dns创建机制解决了各个eruake server 之间的网络获取
https://gitee.com/weijinhao/weifuwu 具体使用dockerFile 和service.yaml 及各种application.yaml
https://gitee.com/weijinhao/k8s-deployment-source-code 各种相关概念的使用样例文件
https://gitee.com/weijinhao/doc 里面的k8s 文档有各种相关概念的说明以及样例使用 他是和
k8s-deployment-source-code配到使用的
https://www.kubernetes.org.cn/5650.html k8s 集群的安装详解文档