K8S的安装

使用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

QQ截图20180808204518

将主节点上配置的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  :查看镜像是否下载到本地:

QQ截图20180808214042

ss -nlt  (查看6443端口是否开启)

mkdir -p $HOME/.kube   (创建一个隐藏目录)

cp -i /etc/kubernetes/admin.conf $HOME/.kube/config (复制文件到刚创建的目录 下)

测试:
kubectl get componentstatus  (查看组件信息)

kubectl get nodes    (查看集群节点的信息)

QQ截图20180808221240

添加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 (查看复制过来的配置文件是否生效)

QQ截图20180809100356

kubeadm join 172.20.49.2:6443 –token h1jv8k.9mjlazp98lx3u9xl –discovery-token-ca-cert-hash sha256:56a94c74f003b7cbe1bcaa9d673cf605dfe8a6887024ef9f369acbe0ac2d09a2 –ignore-preflight-errors=Swap    (将从节点加入到主节点上去,上面的内容来自主节点刚刚保存下来备用的)

QQ截图20180809100845

docker image ls   (查看本节点的镜像下载内容)

kubectl get nodes   (在主节点上执行此条命令,查看自己是否加入到主节点的管理中)

QQ截图20180808223632

nod02的加入方式和nod01的添加方式相同。

 

 

K8S的工作架构: QQ截图20180809092004

在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   QQ截图20180807121317

K8S内部有三层的虚拟网络:容器的虚拟网络;pod的虚拟网络;service的虚拟网络。

pod内部的容器是可以相互通信的用的相同的网络名称空间。

pod和pod的通信,如果在同一个物理节点上则通过pod网络来通信。如果不在同一个物理节点上则需要通过service层的网络来转发代理。

 

 

 

 

 

 

 

 

 

 

 

 

 

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/104669

(7)
上一篇 2018-08-08 16:48
下一篇 2018-08-08 20:57

相关推荐