1 Docker/Kubernetes/Kubesphere关系
docker和k8s都需要安装在三台物理机上,然后形成k8s集群,k8s最小单位是pod,每个pod里面可以包含多个continer,每个容器就类似与镜像服务像redis、nginx、tomcat等服务。
k8s需要docker的容器环境形成可动态伸缩的分布式集群,可以用kubesphere来很方便的管理服务、日志等信息。
2 Docker
X.1 安装容器
启动:systemctl start docker
X.2 镜像管理
docker的三大特征:仓库、镜像、容器。在linux上安装docker技术,在仓库拉取镜像,利用镜像创建多个独立的容器。镜像犹如类,容器犹如类的实例。容器的本质就是微型linux,因为只用到了内核。
网易仓库加速:docker pull hub-mirror.c.163.com/library/nginx:latest
参照tag选择对应版本:
X.3 管理容器

安装tomcat
实例容器时指定对外的端口:docker run -d -p 80:80 89749ed4f17d (IMAGE ID )
查看容器日志
进入容器:docker exec -it mysql1 /bin/bash
安装mysql
实例容器时指定对外的端口:docker run -d -p 80:80 89749ed4f17d (IMAGE ID )
进入容器:docker exec -it 5185f6188151 /bin/bash(CONTAINER ID )
总结:
- 要删除容器就应该先停止,在删除。
- 并且先运行run命令创建一个容器后才能进行容器的stop、start、rm
- 如过在用run命令时,如果存在一个docker ps -a 名字相同的容器时,该命令运行不了。
安装vim:
在使用docker容器时,有可能没有安装Vi, 安装Vi:apt-get install vim,如果提示:Unable to locate package vim,则需要敲:apt-get update, 等更新完毕以后再敲命令: apt-get install vim
注意:
有的人会遇到监听 80 端口访问 html 时候,报错 404 ,确认配置文件无误后,原因是:
Nginx的docker容器中,有一个默认配置文件 /etc/nginx/nginx.conf 。还有一个默认放配置文件的目录 /etc/nginx/conf.d。nginx 会加载目录conf.d 下的 *.conf 文件。如果这些 .conf 文件的内容和 /etc/nginx/nginx.conf 文件有冲突,那么nginx会默认用 conf.d 目录下的文件配置去覆盖 nginx.conf 文件里面的配置。nginx 容器的 conf.d 目录下有个 default.conf 配置文件。
最后:
现象:
[root@localhost ~]# docker run -d -p 9000:80 centos:httpd /bin/sh -c /usr/local/bin/start.sh
d5b2bd5a7bc4895a973fe61efd051847047d26385f65c278aaa09e4fa31c4d76
docker: Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen (6bda693d1143657e46bee0300276aa05820da2b21a3d89441e820d1a274c48b6): (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 9000 -j DNAT --to-destination 172.17.0.2:80 ! -i docker0: iptables: No chain/target/match by that name.
(exit status 1)).
[root@localhost ~]# docker start d5b2bd5a7bc4
Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen (4127da7466709fd45695a1fbe98e13c2ac30c2a554e18fb902ef5a03ba308438): (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 9000 -j DNAT --to-destination 172.17.0.2:80 ! -i docker0: iptables: No chain/target/match by that name.
(exit status 1))
Error: failed to start containers: d5b2bd5a7bc4
原因:
docker服务启动时定义的自定义链DOCKER由于某种原因被清掉
重启docker服务及可重新生成自定义链DOCKER
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DOCKER all -- 0.0.0.0/0 0.0.0.0/0 ADDRTYPE match dst-type LOCAL
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
DOCKER all -- 0.0.0.0/0 !127.0.0.0/8 ADDRTYPE match dst-type LOCAL
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- 172.17.0.0/16 0.0.0.0/0
MASQUERADE tcp -- 172.17.0.2 172.17.0.2 tcp dpt:8080
Chain DOCKER (2 references)
target prot opt source destination
RETURN all -- 0.0.0.0/0 0.0.0.0/0
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:8888 to:172.17.0.2:8080
root@router:playbook#iptables -t nat -nL
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DOCKER all -- 0.0.0.0/0 0.0.0.0/0 ADDRTYPE match dst-type LOCAL
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
DOCKER all -- 0.0.0.0/0 !127.0.0.0/8 ADDRTYPE match dst-type LOCAL
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- 172.17.0.0/16 0.0.0.0/0
MASQUERADE tcp -- 172.17.0.2 172.17.0.2 tcp dpt:8080
Chain DOCKER (2 references)
target prot opt source destination
RETURN all -- 0.0.0.0/0 0.0.0.0/0
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:8888 to:172.17.0.2:8080
解决:
重启docker服务后再启动容器
systemctl restart docker
docker start my03_nginx
3 Kubernetes
X.1 架构
- 每个node节点都有kubelet厂长,用于管理node节点上的所有应用程序,假如应用2挂了就会上报给主节点,然后根据情况在其它节点上部署应用2
- 每个node节点都有kube-proxy访问代理,用于访问其它应用的方式
- kuberctl用于告诉主节点部署当前应用,最后给kubelet发送部署指令
X.2 安装
原理
- 所有节点安装kubelet,主节点安装kubectl和kubeadm,从节点可以不用安装这两个
- kubeadm int初始化主节点,然后用kubeadm join将从节点加入主节点即可
安装docker
配置yum
yum install -y yum-utils
yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo
三台机器都安装docker
//现在启动docker然后设置开机启动docker
[root@localhost ww]# systemctl enable docker --now
三台机器都配置docker
安装kubelet/kubeadm/kubectl
和docker一样k8s也是需要物理安装,只有kuber-prox是以镜像的方式运行
下面的配置命令三台机器都要执行
下面的命令在三台物理机上都要执行
1、配置下载这三个组件的地址
2、安装三大件
3、启动三大件之一的厂长组件kubelet
安装kube-proxy
和docker一样k8s也是需要物理安装,只有kuber-prox是以镜像的方式运行
在三台中节点将内如输出到images.sh文件中,然后父权并执行下载镜像
初始化主节点并加入从节点到集群
将主节点的ip地址和主机名绑定,然后在每台机器上执行命令,让所有节点都知道主节点的位置
下面命令只在主节点执行
部署主节点的网络插件,只在主节点执行
将worker加入集群,只在从节点执行,这个命令是上面主节点靠过来的有效期为24小时
如果令牌过期的话用下面命令在主节点执行刷新即可
部署dashboard
用界面的方式代替kubectl等命令行的方式管理k8s
如果下载失败就到浏览器中获取文本后粘贴到下面文件中即可
因此只需要k8s集群中的任意一台物理机的ip+30753端口就能访问到这个服务了
获取令牌