关于k8s的原理我不多说,官网文档都有,https://www.kubernetes.org.cn/k8s
本章主要将如何搭建k8s以及使用图形化界面(dashbroad)管理k8s
1.准备四台主机
一台作为master,3台为节点机node
2 设置 ip 和主机名
以自己的主机ip和主机名为主,四台主机都需要配置
/etc/hosts
192.168.1.7 master
192.168.1.8 node1
192.168.1.9 node2
192.168.1.10 node3
#开启路由转发,每台都需要
echo "1" > /proc/sys/net/ipv4/ip_forward
3 配置 yum 源
[依赖包下载]https://github.com/ck784101777/kubernetes
containernetworking-cni-0.6.0-3.el7.x86_64.rpm kubernetes-kubeadm-1.10.3-0.el7.x86_64.rpm
etcd-3.3.11-2.el7.centos.x86_64.rpm kubernetes-master-1.10.3-0.el7.x86_64.rpm
flannel-0.7.1-4.el7.x86_64.rpm kubernetes-node-1.10.3-0.el7.x86_64.rpm
kubernetes-1.10.3-0.el7.x86_64.rpm kubernetes-client-1.10.3-0.el7.x86_64.rpm
yum -y install vsftp #装ftp,只在master上
mkdir /var/ftp/kubernetes
cp * /var/ftp/kubernetes/ #将依赖包放到kubernetes下
systemctl start vsftpd
yum -y install createrepo #安装createrepo用来生成yum仓库
createrepo . #创建yum仓库,有一个字符点不要忘记
vim /etc/yum.repos.d/kub.repo #创建yum配置文件,每一台主机都要配置
[kub]
name=kub
baseurl=ftp://192.168.1.11/kubernetes
gpgcheck=0
enabled=1
4 配置私有仓库 registry
[依赖包下载]https://github.com/ck784101777/kubernetes
centos.tar
kubernetes-dashboard.tar
pod-infrastructure.tar
四台主机都需要安装
yum -y install docker #docker安装包
yum install docker-distribution #docker仓库依赖包
在master上配置私有仓库,修改配置文件
vim /etc/sysconfig/docker #每台主机上都要修改
ADD_REGISTRY='--add-registry 192.168.1.7:5000' #添加一个仓库,ip地址填你master的ip
INSECURE_REGISTRY='--insecure-registry 192.168.1.7:5000' #将这个仓库通过安全授权
systemctl start docker docker-distribution #启动docker,docker-distribution每台都要起
docker -i load centos.tar #上传镜像,在master上操作
docker -i load kubernetes-dashboard.tar
docker -i load pod-infrastructure.tar
docker tag docker.io/centos:latest 192.168.1.7:5000/docker.io/centos:latest #打包镜像,在master上操作
docker tag kubernetes-dashboard-amd64:v1.8.3 192.168.1.7:5000/kubernetes-dashboard-amd64:v1.8.3
docker tag pod-infrastructure.tar 192.168.1.7:5000/pod-infrastructure:latest
docker push 192.168.1.7:5000/docker.io/centos:latest #上传镜像到镜像仓库,master上操作
docker push 192.168.1.7:5000/kubernetes-dashboard-amd64:v1.8.3
docker push 192.168.1.7:5000/pod-infrastructure:latest
docker pull 192.168.1.7:5000/docker.io/centos:latest #下载镜像,node上操作
docker pull 192.168.1.7:5000/kubernetes-dashboard-amd64:v1.8.3
docker pull 192.168.1.7:5000/pod-infrastructure:latest
5 配置 kubernets - master
yum -y install etcd kubernetes-master kubernetes-client #安装依赖包
vim /etc/etcd/etcd.conf #修改etcd.cnf 第六行,改成master的ip
6: ETCD_LISTEN_CLIENT_URLS="http://192.168.1.7:2379"
vim /etc/kubernetes/config #修改config第22行,改成master的ip
22: KUBE_MASTER="--master=http://192.168.1.7:8080"
vim /etc/kubernetes/apiserver #修改第8行,改成0.0.0.0,第17行,改成master的ip,第23行,删除双引号下的ServiceAccount
8: KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"
17: KUBE_ETCD_SERVERS="--etcd-servers=http://192.168.1.7:2379"
23: 删除 ServiceAccount 参数
KUBE_ADMISSION_CONTROL="--admission- control=NamespaceLifecycle,LimitRanger,SecurityContextDeny,ResourceQuota"
systemctl start kube-apiserver kube-controller-manager kube-scheduler etcd
6 配置 kubernets - node
yum -y install kubernetes-node #安装节点服务
vim /etc/kubernetes/config #修改config第22行,改成master的ip
22: KUBE_MASTER="--master=http://192.168.1.7:8080"
vim /etc/kubernetes/kubelet
#修改kubelet第5行,改成0.0.0.0,修改11行修改成本机ip,修改第14行,请复制我的(修改一下ip,为master的ip的地址)
5: KUBELET_ADDRESS="--address=0.0.0.0"
11: KUBELET_HOSTNAME="--hostname-override=本机名称"
14:KUBELET_ARGS="--cgroup-driver=systemd --fail-swap-on=false --kubeconfig=/etc/kubernetes/kubelet.kubeconfig --pod-infra-container-image=192.168.1.7:5000/pod-infrastructure:latestt
vim /etc/kubernetes/kubelet.kubeconfig #创建一个kubelet.kubeconfig,配置信息如下,修改一下ip,为master的ip的地址
apiVersion: v1
kind: Config
clusters:
- cluster:
server: http://192.168.1.7:8080 ###Master的IP,即自身IP
name: local
contexts:
- context:
cluster: local
name: local
current-context: local
systemctl start kubelet kube-proxy docker #启动一下服务
此时kubernate节点已经建立成功了,可以去master主机上验证一下
kubectl get node #为Ready说明已经启动成功
NAME STATUS ROLES AGE VERSION
node1 Ready
node2 Ready
node3 Ready
7.网络
完成了上面的配置,k8s已经配置成功了,但是还是无法通信,下面是配置网络,实现容器与真机,容器与容器之间的通信
master配置:
vim /etc/etcd/etcd.conf #修改第6行,为0.0.0.0
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
#输入命令etcdctl mk 创建虚拟网络
etcdctl mk /atomic.io/network/config '{"Network": "10.254.0.0/16", "Backend": {"Type": "vxlan"}}'
#查看是否创建成功
etcdctl get /atomic.io/network/config
{"Network": "10.254.0.0/16", "Backend": {"Type": "vxlan"}}
#输入ifconfig可以看到有个10.254.0.0的网络
ifconfig
docker0: flags=4099
inet 10.254.92.1 netmask 255.255.255.0 broadcast 0.0.0.0
node配置:
yum install flannel #安装flannel
#修改第4行,改成master的ip
vim /etc/sysconfig/flanneld
FLANNEL_ETCD_ENDPOINTS="http://192.168.1.7:2379"
systemctl stop docker #必须关闭docker
systemctl start flanneld #必须先启动flanneld再启动docker
systemctl start docker
连通性测试:
#在node1上创建一个docker容器,放在后台
docker run -itd 192.168.1.7:5000/docker.io/centos
#查看id号
docker ps
#查看容器的ip
docker inspect id号
#在node2节点上ping这个容器的ip,若ping通说明网络配置成功
ping ip
#配置失败的解决方案:
#将路由转发默认规则设置为接受
iptables -I FORWARD -j ACCEPT
8 创建容器,测试
[baseos.yaml和kube-dashboard.yaml下载地址]https://github.com/ck784101777/kubernetes
#通过k8s创建容器
kubectl create -f baseos.yaml
#查看容器
kubectl get pod -o wide
#执行容器
kubectl exec -it test-os-3826630470-jc5j4 -- /bin/bash
#创建kube-dashboard图形化管理
kubectl create -f kube-dashboard.yaml
#查看容器,需要切换命名空间.
kubectl get pod -o wide -n kube-system
NAME READY STATUS RESTARTS AGE IP NODE
kubernetes-dashboard-8c7f65475-gm788 1/1 Running 0 1h 10.254.17.2 node2
#我的dashboard运行在node2上,使用firefox访问管理网站,端口为30090
firefox node2:30090