Open liujiusheng opened 5 years ago
本文章主要是帮助初学者将《Kubernetes权威指南-第二版》中的示例跑起来。
Docker目前已经可以运行于Linux,Windows,MacOS系统。 Win10的企业版和专业版可以直接在“Windows功能”里面勾选Hyper-V打开Windows版本的Docker。 也可以使用boot2docker或者Docker for Windows工具来安装。
docker现在已经更名为了moby
k8s是谷歌出品的一个开源集群管理工具
k8s中执行kubectl get pods 时若状态为Terminating,表示pod正在被删除,Normal,Pulling,Pulled,Created,Started表示正在启动。Running表示镜像拉取成功并且启动成功。
可使用kubectl delete pod PODNAME --force --grace-period=0命令强制删除pod。
所有k8s里面用到了的镜像都需要自己先手动docker pull mysql一下,拉到本地。
关闭防火墙:
systemctl disable firewalld systemctl stop firewalld
k8s启动命令:
systemctl start etcd systemctl start docker systemctl start kube-apiserver systemctl start kube-controller-manager systemctl start kube-scheduler systemctl start kubelet systemctl start kube-proxy
关闭命令:
systemctl stop etcd systemctl stop docker systemctl stop kube-apiserver systemctl stop kube-controller-manager systemctl stop kube-scheduler systemctl stop kubelet systemctl stop kube-proxy
docker login hub.docker.com命令可登录仓库
启动服务命令:
kubectl create -f mysql-rc.yaml kubectl create -f mysql-svc.yaml kubectl create -f myweb-rc.yaml kubectl create -f myweb-svc.yaml
关闭服务:
kubectl delete -f mysql-rc.yaml kubectl delete -f mysql-svc.yaml kubectl delete -f myweb-rc.yaml kubectl delete -f myweb-svc.yaml
重新加载docker配置:
systemctl daemon-reload systemctl restart docker
先后会遇到
下载相关包,手动生成crt文件 wget http://mirror.centos.org/centos/7/os/x86_64/Packages/python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm
rpm2cpio python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm | cpio -iv --to-stdout ./etc/rhsm/ca/redhat-uep.pem | tee /etc/rhsm/ca/redhat-uep.pem
修改/etc/kubernetes/kubelet文件中KUBELET_ARGS为:KUBELET_ARGS="--cluster-dns=10.10.0.10 --cluster-domain=cluster.local"
最好是能注册一个阿里云的账号用上面的镜像,不然真的会慢成狗 https://cr.console.aliyun.com/cn-hangzhou/mirrors
--registry-mirror=https://ka7kmrnv.mirror.aliyuncs.com
kubeguide/tomcat-app:v1,这个版本号一定是需要的,不然会提示not found.找不到也就是说网络实际上已经通了,但是找不到这个库,所以需要上hub.docker.com上去仔细核对是不是名字写错了或者版本号写错了。
基础容器镜像需要配置成默认的红帽那一个,即: KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest" 其它的都不能成功,至于要不要把翻墙开上不太清楚,好像是不需要的,因为配置了mirror-registries为阿里云的地址的。
新版本的docker配置有两个地方,即:containers/registries.conf和,docker/daemon.json registries.conf在search里面最好也加上阿里云的镜像:ka7kmrnv.mirror.aliyuncs.com,因为我怀疑daemon.json文件并没有生效,当然啦,按照阿里云官方的说法,配置在daemon.json文件里是可以镜像加速的。
书上说的需要配置/etc/sysconfig/docker文件中:--insecure-registry gcr.io,这一名其实可以不用配置,如果配置了上述docker两个配置文件的话。
以上解决方法还待验证。
书上说的需要配置/etc/sysconfig/docker文件中:--insecure-registry。这一个代表私有仓库地址,当我们只用公有仓库的镜像时是可以不用配置它的,如果要配置就使用国内镜像,不要使用书上写的gcr.io。而且新版本推荐的配置地方已经是daemon.json文件里面了。
/etc/docker/daemon.json中需要配置阿里云的源。然后新加载配置和重启docker. centos7需要将docker.service复制到另一个目录
sudo cp -n /lib/systemd/system/docker.service /etc/systemd/system/docker.service 并且在ExecStart部分加上参数--registry-mirror=<我的阿里云镜像地址>
sudo cp -n /lib/systemd/system/docker.service /etc/systemd/system/docker.service
有个疑问,既然这里这样配置了,那
/etc/kubernetes/apiserver文件中ServiceAccount如果不删除,那么get pods的时候会返回no resource found.
由于电脑上的虚拟机不会使用主机上的代理,所以即使外部的主机上安装了蓝灯等代理软件也并不能解决虚拟机里不能翻墙的问题。 解决虚拟机里docker没法拉镜像下来的另一个办法是,在宿主机上打开蓝灯,然后在虚拟机里执行:export https_proxy=https:192.168.0.101:51745将虚拟机的https请求用外部的代理进行代理,然后运行sudo docker run nginx就可以正常下载镜像了
export https_proxy=https:192.168.0.101:51745
在命令行使用--registry-mirror=https://ka7kmrnv.mirror.aliyuncs.com的方式已经不被支持了 阿里云镜像的方式亲测是可以成功的
先关闭防火墙, systemctl disable firewalld systemctl stop firewalld 再 iptables -P FORWARD ACCEPT一行命令搞定
iptables -P FORWARD ACCEPT
期间可能需要切换虚拟机模式,NAT模式与桥接模式的转换,桥接模式需要配置: BOOTPROTO="static" IPADDR=172.16.2.128 GATEWAY=192.16.2.1 NETMASK=255.255.255.0
后经反复实验表明,NAT模式下不需要配置为静态ip宿主机也是可以访问虚拟机里的内容的。
需要先启动rc再启动svc.如果不启动svc访问会报Connection refused错误,curl也访问不到
Connection refused
kubectl describe pod mysql可以查看mysql这一个pod的日志。
安装netstat 工具:yum -y install net-tools
查看2379端口绑定的Ip是多少:netstat -anp | grep 2379
测试ip和端口是否通了:telnet 192.168.64.133 2379 telnet测试时只有目标服务器有在这个Ip上绑定端口才会有返回值 ,否则只会提示Connection refused
centos7上即使防火墙关闭了外面也不一定能访问到,还需要把防火墙打开后显式配置相应的端口后再关闭防火墙。
开启防火墙:systemctl start firewalld 开机启动防火墙:systemctl enable firewalld 添加8080端口:firewall-cmd --zone=public --add-port=8080/tcp --permanent 重新加载配置:firewall-cmd --reload 关闭防火墙:systemctl stop firewalld 开机不启动防火墙:systemctl disable firewalld 查看已配置的端口:firewall-cmd --list-ports 查看所有已允许通过的服务:firewall-cmd --get-services,默认只通过ssh dhcpv6-client。需要手动加入http。 查看开放的端口和服务:firewall-cmd --list-all
etcd作为k8s运行的数据中心,它的配置文件为/etc/etcd/etcd.conf,实际使用过程中需要在此文件内绑定ip。否则其它节点无法连接。ETCD_LISTEN_CLIENT_URLS和ETCD_ADVERTISE_CLIENT_URLS都要修改。
测试的时候/etc/kubernetes/apiserver内的--insecure-bind-address=0.0.0.0要设置为任意机器都可以连接,否则其它节点连接不到,从而加入不了集群。
flannel作为其网络统一性保障的基础设施,需要安装。可使用yum安装 。 安装完成后需要修改:/etc/sysconfig/flanneld文件,并将FLANNEL_ETCD_ENDPOINTS设置为etcd所绑定的ip。 修改完后重新加载配置并重新启动flannel和docker,此时ip addr命令查看时会发现flanneld和docker在同一网段。
/etc/kubernetes/kubelet中:--hostname-override表示本机的名字,通常应该配置成本机ip地址,若多台机器用了同一个名字,能注册成功,但master节点调度会出问题。
KUBELET_ADDRESS="--address=0.0.0.0"可以设置为0.0.0.0也可以设置为127.0.0.1,影响不大。
查看实时输出的错误:journalctl -f -u kubelet
是虚拟化的一个软件环境,包括操作系统等,而不仅仅是虚拟化的一个软件。
首先 删除 容器,再删除镜像
docker ps -a docker rm id 删除镜像
docker ps -a
docker images
docker rmi id
检查是否删除成功
docker启动的时候要映射端口,如: docker run --name mynginx -p 30001:80 -d nginx 表示运行nginx的镜像,并命名为mynginx 其中,nginx内部的80端口映射为外部的30001端口,外部可通过30001端口进行访问。
sudo docker save -o golang:alpine3.7 ./my-golang-alpine3.7.tar //把我本机的golang:alpine3.7 镜像保存为当前目录下的归档文件my-golang-alpine3.7.tar ,然后把此归纳文件拷贝到任意你想要的地方(比如 u盘 移动硬盘 电脑等)
在需要还原docker image的主机执行:sudo docker load < my-golang-alpine3.7.tar (宿主机必须装有docker)
K8s官网 解决crt问题,使用这个的时候一定不能使用自己配置的dns,否则会找不到源。问题详见:dns导致下载出错的问题 防火墙问题
本文章主要是帮助初学者将《Kubernetes权威指南-第二版》中的示例跑起来。
Docker目前已经可以运行于Linux,Windows,MacOS系统。 Win10的企业版和专业版可以直接在“Windows功能”里面勾选Hyper-V打开Windows版本的Docker。 也可以使用boot2docker或者Docker for Windows工具来安装。
docker现在已经更名为了moby
k8s是谷歌出品的一个开源集群管理工具
k8s中执行kubectl get pods 时若状态为Terminating,表示pod正在被删除,Normal,Pulling,Pulled,Created,Started表示正在启动。Running表示镜像拉取成功并且启动成功。
可使用kubectl delete pod PODNAME --force --grace-period=0命令强制删除pod。
所有k8s里面用到了的镜像都需要自己先手动docker pull mysql一下,拉到本地。
关闭防火墙:
k8s启动命令:
关闭命令:
docker login hub.docker.com命令可登录仓库
启动服务命令:
关闭服务:
重新加载docker配置:
先后会遇到
1.ca.crt证书的问题(一定会出现)
下载相关包,手动生成crt文件 wget http://mirror.centos.org/centos/7/os/x86_64/Packages/python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm
rpm2cpio python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm | cpio -iv --to-stdout ./etc/rhsm/ca/redhat-uep.pem | tee /etc/rhsm/ca/redhat-uep.pem
2.dns问题(不一定出现):
修改/etc/kubernetes/kubelet文件中KUBELET_ARGS为:KUBELET_ARGS="--cluster-dns=10.10.0.10 --cluster-domain=cluster.local"
3.拉不下来仓库数据的问题(一定会出现)
最好是能注册一个阿里云的账号用上面的镜像,不然真的会慢成狗 https://cr.console.aliyun.com/cn-hangzhou/mirrors
--registry-mirror=https://ka7kmrnv.mirror.aliyuncs.com
kubeguide/tomcat-app:v1,这个版本号一定是需要的,不然会提示not found.找不到也就是说网络实际上已经通了,但是找不到这个库,所以需要上hub.docker.com上去仔细核对是不是名字写错了或者版本号写错了。
基础容器镜像需要配置成默认的红帽那一个,即: KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest" 其它的都不能成功,至于要不要把翻墙开上不太清楚,好像是不需要的,因为配置了mirror-registries为阿里云的地址的。
新版本的docker配置有两个地方,即:containers/registries.conf和,docker/daemon.json registries.conf在search里面最好也加上阿里云的镜像:ka7kmrnv.mirror.aliyuncs.com,因为我怀疑daemon.json文件并没有生效,当然啦,按照阿里云官方的说法,配置在daemon.json文件里是可以镜像加速的。
书上说的需要配置/etc/sysconfig/docker文件中:--insecure-registry gcr.io,这一名其实可以不用配置,如果配置了上述docker两个配置文件的话。
以上解决方法还待验证。
书上说的需要配置/etc/sysconfig/docker文件中:--insecure-registry。这一个代表私有仓库地址,当我们只用公有仓库的镜像时是可以不用配置它的,如果要配置就使用国内镜像,不要使用书上写的gcr.io。而且新版本推荐的配置地方已经是daemon.json文件里面了。
/etc/docker/daemon.json中需要配置阿里云的源。然后新加载配置和重启docker. centos7需要将docker.service复制到另一个目录
sudo cp -n /lib/systemd/system/docker.service /etc/systemd/system/docker.service
并且在ExecStart部分加上参数--registry-mirror=<我的阿里云镜像地址>有个疑问,既然这里这样配置了,那
/etc/kubernetes/apiserver文件中ServiceAccount如果不删除,那么get pods的时候会返回no resource found.
由于电脑上的虚拟机不会使用主机上的代理,所以即使外部的主机上安装了蓝灯等代理软件也并不能解决虚拟机里不能翻墙的问题。 解决虚拟机里docker没法拉镜像下来的另一个办法是,在宿主机上打开蓝灯,然后在虚拟机里执行:
export https_proxy=https:192.168.0.101:51745
将虚拟机的https请求用外部的代理进行代理,然后运行sudo docker run nginx就可以正常下载镜像了在命令行使用--registry-mirror=https://ka7kmrnv.mirror.aliyuncs.com的方式已经不被支持了 阿里云镜像的方式亲测是可以成功的
4.外部宿主机上访问不到虚拟机里tomcat的问题(已经没用了)
先关闭防火墙, systemctl disable firewalld systemctl stop firewalld 再
iptables -P FORWARD ACCEPT
一行命令搞定期间可能需要切换虚拟机模式,NAT模式与桥接模式的转换,桥接模式需要配置: BOOTPROTO="static" IPADDR=172.16.2.128 GATEWAY=192.16.2.1 NETMASK=255.255.255.0
后经反复实验表明,NAT模式下不需要配置为静态ip宿主机也是可以访问虚拟机里的内容的。
5.机器本地curl都访问不到的问题
需要先启动rc再启动svc.如果不启动svc访问会报
Connection refused
错误,curl也访问不到kubectl describe pod mysql可以查看mysql这一个pod的日志。
安装netstat 工具:yum -y install net-tools
查看2379端口绑定的Ip是多少:netstat -anp | grep 2379
测试ip和端口是否通了:telnet 192.168.64.133 2379 telnet测试时只有目标服务器有在这个Ip上绑定端口才会有返回值 ,否则只会提示Connection refused
centos7上即使防火墙关闭了外面也不一定能访问到,还需要把防火墙打开后显式配置相应的端口后再关闭防火墙。
开启防火墙:systemctl start firewalld 开机启动防火墙:systemctl enable firewalld 添加8080端口:firewall-cmd --zone=public --add-port=8080/tcp --permanent 重新加载配置:firewall-cmd --reload 关闭防火墙:systemctl stop firewalld 开机不启动防火墙:systemctl disable firewalld 查看已配置的端口:firewall-cmd --list-ports 查看所有已允许通过的服务:firewall-cmd --get-services,默认只通过ssh dhcpv6-client。需要手动加入http。 查看开放的端口和服务:firewall-cmd --list-all
etcd作为k8s运行的数据中心,它的配置文件为/etc/etcd/etcd.conf,实际使用过程中需要在此文件内绑定ip。否则其它节点无法连接。ETCD_LISTEN_CLIENT_URLS和ETCD_ADVERTISE_CLIENT_URLS都要修改。
测试的时候/etc/kubernetes/apiserver内的--insecure-bind-address=0.0.0.0要设置为任意机器都可以连接,否则其它节点连接不到,从而加入不了集群。
flannel作为其网络统一性保障的基础设施,需要安装。可使用yum安装 。 安装完成后需要修改:/etc/sysconfig/flanneld文件,并将FLANNEL_ETCD_ENDPOINTS设置为etcd所绑定的ip。 修改完后重新加载配置并重新启动flannel和docker,此时ip addr命令查看时会发现flanneld和docker在同一网段。
/etc/kubernetes/kubelet中:--hostname-override表示本机的名字,通常应该配置成本机ip地址,若多台机器用了同一个名字,能注册成功,但master节点调度会出问题。
KUBELET_ADDRESS="--address=0.0.0.0"可以设置为0.0.0.0也可以设置为127.0.0.1,影响不大。
查看实时输出的错误:journalctl -f -u kubelet
Docker
是虚拟化的一个软件环境,包括操作系统等,而不仅仅是虚拟化的一个软件。
首先 删除 容器,再删除镜像
docker ps -a docker rm id 删除镜像
docker ps -a
docker images
docker rmi id
检查是否删除成功
docker images
docker启动的时候要映射端口,如: docker run --name mynginx -p 30001:80 -d nginx 表示运行nginx的镜像,并命名为mynginx 其中,nginx内部的80端口映射为外部的30001端口,外部可通过30001端口进行访问。
docker镜像的复制(内网部署):
sudo docker save -o golang:alpine3.7 ./my-golang-alpine3.7.tar //把我本机的golang:alpine3.7 镜像保存为当前目录下的归档文件my-golang-alpine3.7.tar ,然后把此归纳文件拷贝到任意你想要的地方(比如 u盘 移动硬盘 电脑等)
在需要还原docker image的主机执行:sudo docker load < my-golang-alpine3.7.tar (宿主机必须装有docker)
其它参考:
K8s官网 解决crt问题,使用这个的时候一定不能使用自己配置的dns,否则会找不到源。问题详见:dns导致下载出错的问题 防火墙问题