1 docker相关
1.1 CentOS7系统配置国内yum源
cd /etc/yum.repos.d/ #到yum源的目录
mkdir repo_bak #备份文件夹
mv *.repo repo_bak/ #备份之前的源信息
wget http://mirrors.aliyun.com/repo/Centos-7.repo #下载阿里源的数据
yum clean all #清楚所有的yum缓存
yum makecache # 生成yum缓存,可能需要一段时间
1.2 centos docker 安装
systemctl stop firewalld #关闭防火墙
systemctl disable firewalld #禁用防火墙
setenforce 0 #禁用SELINUX
yum install -y yum-utils device-mapper-persistent-data lvm2 #安装必要系统工具
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo #添加docker的yum源
yum makecache fast #生产yum缓存
yum -y install docker-ce #安装docker
service docker start #启动服务
systemctl enable docker #开机启动
docker version #查看版本
1.3 docker 基本组成和使用
1.3.1 仓库,类似于应用商城
1.3.1.1 上传、下载和搜索应用
docker pull 镜像地址 #类似于从商城下载应用
docker push 本地镜像 #类似于把做好的应用上传到商城
docker search 名称 #搜索镜像
1.3.1.2 建立http私有仓库(建议单独机器单独配置,一台机器或多台专门作为私有仓库)
docker pull registry #下载镜像
docker run -di --name=registry -p 5000:5000 registry #启动私有仓库
#浏览器访问http://机器地址:5000/v2/_catalog。若浏览器显示{"repositories":[]}则表示安装成功
vi /etc/docker/daemon.json
{"insecure-registries":["机器地址:5000"]} #让docker信任私有仓库地址
systemctl restart docker #重启docker
1.3.1.3 上传镜像到私有仓库
docker tag 现有镜像识别名 机器地址:5000/镜像名称 #(镜像名可自定义)
docker push 机器地址:5000/镜像名称
docker login --username=账号 地址
1.3.2 镜像,类似于软件安装包
1.3.2.1 镜像获取、查看、导出和移除
docker pull 镜像地址 #类似于从商城下载应用
docker build -f /path/to/a/Dockerfile #从Dockerfile创建
docker load -i 镜像文件路径 #从文件加载,文件是docker save的文件
docker images -a#查看镜像信息
docker save 文件路径 #导出镜像文件
docker rmi 镜像识别名 #从本地移除镜像
1.3.3 容器,类似于安装好的应用,可以使用
1.3.3.1 容器的管理
docker run 镜像识别名 #创建一个新的容器并运行一个命令
# --name="" 指定名称 -p: 指定端口映射,格式为:主机(宿主)端口:容器端口 -d: 后台运行容器,并返回容器ID -it 输入终端的页面
docker create 镜像识别名 #创建一个新的容器但不启动它
docker start 容器识别名 #启动一个或多个已经被停止的容器
docker stop 容器识别名 #停止一个运行中的容器 批量停止 docker container stop $(docker container ls -a -q)
docker restart 容器识别名 #重启容器
docker kill 容器识别名 #杀掉一个运行中的容器。和stop的区别在于强制
docker rm 容器识别名 #删除一个或多个容器,必须要在停止后才能删除,功能类似于卸载 批量删除 docker container rm $(docker container ls -a -q)
docker exec 容器识别名 运行指令 #在运行的容器中执行命令,docker exec -it 容器识别名 /bin/bash 进入命令行页面
1.3.3.2 容器的操作
docker ps 容器识别名 # 列出容器 类似 docker container ls
docker inspect 识别名 # 获取容器/镜像的元数据
docker top 容器识别名 # 查看容器中运行的进程信息,类似linux 的 ps命令
docker logs -f 容器识别名 # 获取容器的日志
docker diff 容器识别名 #检查容器里文件结构的更改
docker cp 路径 路径 #用于容器与主机之间的数据拷贝 docker cp /本地 识别名:/路径
docker commit 容器识别名 #从容器创建一个新的镜像,映射文件夹在文件不保存在新的镜像中
1.3.4 样例:新建nginx的镜像
安装docker完毕
安装私有库:ku.prv
了解: 日志文件位置:/var/log/nginx
配置文件位置: /etc/nginx
资源存放的位置: /usr/share/nginx/html
docker pull nginx:latest #从官方下载镜像
docker images #查看镜像存在
docker run --name nginx-test -p 8080:80 -d nginx #运行镜像获得容器
curl xxx:8080 #有信息返回即可
echo "test12312313" >> /usr/share/nginx/html/index.html/index
curl xxx:8080 #有信息含有test12312313
docker exec 容器识别名 service nginx status #查看状态
mkdir -p /home/mydir/log #创建目录
docker cp 容器识别名:/var/log/nginx /home/mydir/log/ #复制日志文件到本地
docker commit -m 'Nginx' -a 'test-Nginx' 容器识别名 #提交新的更新到新的镜像
docker tag 新的镜像名 ku.prv:5000/镜像名:tag #打一个tag标注新的库
docker push ku.prv:5000/镜像名:tag #上传到私有库 浏览器访问http://机器地址:5000/v2/_catalog,看是否上传成功
docker stop nginx-test #停止容器
docker rm nginx-test #移除容器
#重开一个容器,添加映射
docker run \
-p 8080:80 \
--name nginx_test \
-v /home/mydir/log/:/var/log/nginx \
-d nginx
2 Kubernetes
2.1 准备信息
上面的私有库安装完毕
上面上传的自制nginx镜像
配置完成yum源
关闭所有防火墙
再准备三台干净的服务器,不要提前安装docker
当前服务器列表:
10.0.0.22 ku
10.0.0.23 matser
10.0.0.24 test003
10.0.0.25 test004
#每个节点修改host,添加关联
vim /etc/hosts
#查看dns是否有指定跳转
vim /etc/resolv.conf
2.2 安装
2.2.1 master 节点安装etcd
#暂时考虑使用单点模式
yum install etcd -y #安装etcd,类似键值对存储库
#修改etcd 的配置文件
vim /etc/etcd/etcd.conf
# ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379" 访问etcd的路径
# ETCD_ADVERTISE_CLIENT_URLS="http://0.0.0.0:2379"
systemctl start etcd.service #启动服务
systemctl enable etcd.service #开机启动
etcdctl -C http://10.0.0.23:2379 cluster-health #查看健康情况
2.2.2 master 安装kubernetes
yum install kubernetes-master.x86_64 -y #安装kube 版本为1.5.2 比较老,但可以用
#修改配置文件
vim /etc/kubernetes/apiserver
#KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"
#KUBE_ETCD_SERVERS="--etcd-servers=http://10.0.0.23:2379"
#KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota"
#删除ServiceAccount
vim /etc/kubernetes/config
#KUBE_MASTER="--master=http://10.0.0.23:8080" 设置外部访问接口
#启动服务
systemctl enable kube-apiserver.service
systemctl start kube-apiserver.service
systemctl enable kube-controller-manager.service
systemctl start kube-controller-manager.service
systemctl enable kube-scheduler.service
systemctl start kube-scheduler.service
#查看是否正常
kubectl get componentstatus
vim /etc/docker/daemon.json #{"insecure-registries":["10.0.0.22:5000"]}
2.2.3 Node节点安装kubernetes
#在节点的服务器中:
#修改配置文件
vim /etc/kubernetes/config #KUBE_MASTER="--master=http://10.0.0.23:8080" 设置master路径
vim /etc/kubernetes/kubelet
#KUBELET_ADDRESS="--address=0.0.0.0" 设成0.0.0.0
#KUBELET_HOSTNAME="--hostname-override=10.0.0.24" 设置node的ip
#KUBELET_API_SERVER="--api-servers=http://10.0.0.23:8080" 设置master的路径
#KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=10.0.0.22:5000/pod-infrastructure:latest" 此处下面说,修改成私有库地址或者快速地址
#启动服务
systemctl start kubelet.service
systemctl enable kubelet.service
systemctl start kube-proxy.service
systemctl enable kube-proxy.service
#在master服务器上:
kubectl get nodes #查看状态,节点是否连接,可能有小延迟,需要等1分钟左右
2.2.4 准备pod-infrastructure:latest
如果docker pull registry.access.redhat.com/rhel7/pod-infrastructure:latest 顺利就跳过此步
如果无法加载或者报错,考虑使用阿里源下载或者去搜索docker search pod-infrastructure较快的路径
例如当前:docker pull docker.io/tianyebj/pod-infrastructure:latest 能下载
docker tag docker.io/tianyebj/pod-infrastructure 10.0.0.22:5000/pod-infrastructure
docker push 10.0.0.22:5000/pod-infrastructure #上传私有库,由于要经常使用,较慢或者报错十分影响操作
#修改配置文件
/etc/kubernetes/kubelet
#KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=docker.io/tianyebj/pod-infrastructure:latest"
#或者
#KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=10.0.0.22:5000/pod-infrastructure:latest"
#重启master所有服务
for SERVICES in etcd kube-apiserver kube-controller-manager kube-scheduler; do
systemctl restart $SERVICES
systemctl enable $SERVICES
systemctl status $SERVICES
done
#重启node所有服务
for SERVICES in kube-proxy kubelet docker; do
systemctl restart $SERVICES
systemctl enable $SERVICES
systemctl status $SERVICES
done
2.2.5 所有节点安装flannel
#在node服务器上:
yum install flannel -y #安装
# 修改flannel配置文件
vim /etc/sysconfig/flanneld
#FLANNEL_ETCD_ENDPOINTS="http://10.0.0.23:2379" 使用master上安装的etcd的地址
#FLANNEL_OPTIONS=" --iface=enp0s9" 绑定物理网卡名称,由于我是虚拟机双网卡,出现问题,必须绑定一个ip可以互联的网卡
#在master服务器上
etcdctl mk /atomic.io/network/config '{ "Network": "172.100.0.0/16" }'
#在node服务器上:
#修改配置文件
vim /usr/lib/systemd/system/docker.service
#添加 ExecStartPost=/usr/sbin/iptables -P FORWARD ACCEPT
#启动所有服务
systemctl daemon-reload
systemctl enable flanneld.service
systemctl restart flanneld.service
service docker restart
systemctl restart kubelet.service
systemctl restart kube-proxy.service
#验证
ifconfig #查看ip中是否存在flannel0和docker0的虚拟网卡
docker pull busybox
docker run -itd busybox
# 在容器中,ifconfig 查看ip,是否存在ip
#ping 其他容器中的ip,通就完成了
2.3 使用
2.3.1 获取信息
kubectl get 指定类型 #列出某个类型的下属资源 pod 或者nodes 或者rs 或者 svc 等资源,-n 命名空间
kubectl describe 指定类型 #查看某个资源的详细信息 操作同 get
kubectl logs 指定pod #查看某个 pod 的日志
kubectl explain 指定类型 # 查看资源的配置项
2.3.2 增加信息
kubectl create -f yaml文件路径 #新建资源,文件填写格式,使用kubectl explain查看
kubectl create namespace hi #新建命名空间
#新建pod
```
apiVersion: v1 #模板的版本号,默认v1 ,可以使用kubectl api-versions查看版本号
kind: Pod #类型
metadata:
name: myng
namespace: hi #命名空间
labels: #标签,服务主要调用
app: myng
spec:
containers: #容器信息
- image: 10.0.0.22:5000/ng
name: ng1
ports:
- containerPort: 80 #端口是容器内的端口
protocol: TCP
```
#新建rs,不需要新建pod
```
apiVersion: extensions/v1beta1 #经过试验,此版本可以使用
kind: ReplicaSet
metadata:
name: myngs
namespace: hi
spec:
replicas: 5 #维持的数量
selector:
matchLabels:
app: myng #标签,服务主要调用
template:
metadata:
labels:
app: myng
spec:
containers:
- name: myng
image: 192.168.56.113:5000/ng
ports:
- containerPort: 80 #端口是容器内的端口
```
#新建svc,映射端口使用
```
piVersion: v1
kind: Service
metadata:
name: myng
namespace: hi
spec:
type: NodePort #使用后会在node端开放端口
ports:
- name: http
port: 8081 #端口是内部其他pod调用的接口 8080~20000
targetPort: 80 #端口是pod内部的端口
nodePort: 30801 #端口是外网可以访问的端口,30000~32000
selector:
app: myng #之前pod或者rs的标签
```
2.3.3 改数据
kubectl edit 类型 #修改某个资源的配置项,格式类似get
kubectl apply -f <新配置文件名.yaml> #应用某个资源的配置项,
#会根据metadata中的元数据来查找目标资源,如果没有的话则直接新建,如果找到的话就依次比对配置文件之间有什么不同点,然后应用不同的配置
2.3.4 删数据
kubectl delete <资源类型> <资源名> #删除某个资源,kubectl delete pod --all kubectl delete all --all 删除所有,格式类似get
2.3.5 使用账号密码的镜像库
kubectl create secret docker-registry 起名字 --docker-server=库的地址 --docker-username=账号 --docker-password=xxxxxx
在使用时:
```
containers:
- name: channel
image: xxx
ports:
- containerPort: 9999
imagePullSecrets:
- name: 起名字
```
网友评论