使用kubeadm安装部署kubernetes集群:
前提:
1、各节点时间同步;
2、各节点主机名称解析:dns OR hosts;
3、各节点iptables及firewalld服务被disable;
一、设置主节点安装程序包
1、生成yum仓库配置:
主管理节点上的yum仓库的配置:
先配置安装docker仓库:
[docker]
name=docker
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/
gpgcheck=0
[extras]
name=extras
baseurl=http://vault.centos.org/7.4.1708/extras/x86_64/
gpgcheck=0
配置kubernetes的仓库配置文件:
[kubernetes]
name=kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
gpgcheck=0
将主节点上配置的yum仓库复制到其他的两个节点上:nod01;nod02
2、安装相关的程序包 :
yum install docker-ce kubelet kubeadm kubectl (生产中建议使用docker-ce的17.3的版本)
vim /usr/lib/systemd/system/docker.service (修改docker的配置文件)
Environment=”HTTPS_PROXY=http://www.ik8s.io:10080″ Environment=”NO_PROXY=127.0.0.0/8,172.20.0.0/16″
(对访问到国外的镜像网站做代理,如果从本地下载的镜像则不做代理:添加在12行)
systemctl daemon-reload (重新加载配置文件)
systemctl start docker (开启docker服务)
systemctl enable docker (设为开机自启动模式)
docker info (查看定义的信息是否生效)
cat /proc/sys/net/bridge/bridge-nf-call-iptables (查看本机的的此值是否为1)
cat /proc/sys/net/bridge/bridge-nf-call-ip6tables (查看本机的的此值是否为1)
(如果值不为1,要改为1)
systemctl enable kubelet (将kubelet设为开机自启动)
初始化master节点:
vim /etc/sysconfig/kubelet(修改配置文件)
KUBELET_EXTRA_ARGS=”–fail-swap-on=false” (忽略swap的报错)
# kubeadm init –kubernetes-version=v1.11.1 –pod-network-cidr=10.244.0.0/16 service-cidr=10.96.0.0/12 –ignore-preflight-errors=Swap (此选项可以通过kubeadm init –help)
(–kubernetes-version=v1.11.1:指定版本号不指定也可以通过查看help帮助有默认的版本)
(–pod-network-cidr=10.244.0.0/16 :指定pod的网络地址)
(service-cidr=10.96.0.0/12 :指定service得 网络地址,也可通过查看help帮助里有定义 )
(–ignore-preflight-errors=Swap :忽略Swap信息)
装好之后将最后一行复制下来备用:
kubeadm join 172.20.49.2:6443 –token h1jv8k.9mjlazp98lx3u9xl –discovery-token-ca-cert-hash sha256:56a94c74f003b7cbe1bcaa9d673cf605dfe8a6887024ef9f369acbe0ac2d09a2
docker image list :查看镜像是否下载到本地:
ss -nlt (查看6443端口是否开启)
mkdir -p $HOME/.kube (创建一个隐藏目录)
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config (复制文件到刚创建的目录 下)
测试:
kubectl get componentstatus (查看组件信息)
kubectl get nodes (查看集群节点的信息)
添加flannel网络插件
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
查看本机的flannel镜像有没有下载下来:docker image ls
再次查看master节点已经就绪(ready)
kubectl get nodes
kubectl get pods -n kube-system
在nod01节点上:(主机点通过主机名来管理的,需要将从节点点的主机名设置为不同的名称)
yum install docker-ce kubelet kubeadm (安装包)
scp /usr/lib/systemd/system/docker.service 192.168.60.20:/usr/lib/systemd/system/docker.service
scp /etc/sysconfig/kubelet 192.168.60.20:/etc/sysconfig/
(在主节点上执行;将主节点的配置文件复制到从节点上,省的再修改了)
systemctl start docker (启动服务)
systemctl enable docker kubelet (设置为开机自启)
docker info (查看复制过来的配置文件是否生效)
kubeadm join 172.20.49.2:6443 –token h1jv8k.9mjlazp98lx3u9xl –discovery-token-ca-cert-hash sha256:56a94c74f003b7cbe1bcaa9d673cf605dfe8a6887024ef9f369acbe0ac2d09a2 –ignore-preflight-errors=Swap (将从节点加入到主节点上去,上面的内容来自主节点刚刚保存下来备用的)
docker image ls (查看本节点的镜像下载内容)
kubectl get nodes (在主节点上执行此条命令,查看自己是否加入到主节点的管理中)
nod02的加入方式和nod01的添加方式相同。
K8S的工作架构:
在K8S里pod为最小的模块:pod是同一种应用的多个容器的组合,靠控制器来管理,如果定义了某个pod里有三个httpd程序的容器,如果某个容器宕机了,控制器会将其删掉再次新建一个。
控制器又需要控制器管理器来管理,来防止控制器服务的不可用。
service:由于pod里的容器会随时创建或者删除,其地址不是固定的,如果需要访问pod里的容器,会变得很困难,service是将pod里容器的IP地址变成固定可访问的地址,当外部客户端访问pod容器时,经过service的调度转发给内部的pod里的容器。service,只是iptables的一条规则或者ipvs的一条规则,不存在于任何虚拟的IP网卡和物理网卡之上。
service是如何将外部的访问发送给pod里的容器,(容器的IP地址经常变动)
service不是通过IP地址来联通pod里的容器的,而是通过应用的标签名称,来联通的。K8S内部有虚拟的DNS服务器。将pod里的容器名称标签和其IP地址对应上,如果删除或者新建一个容器,DNS记录会自动添加一条A记录的。
K8S的网络架构:
8KKDMNCKNVFN
K8S内部有三层的虚拟网络:容器的虚拟网络;pod的虚拟网络;service的虚拟网络。
pod内部的容器是可以相互通信的用的相同的网络名称空间。
pod和pod的通信,如果在同一个物理节点上则通过pod网络来通信。如果不在同一个物理节点上则需要通过service层的网络来转发代理。
本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/104669