前言
k8s的部署方式:node
kubernetes须要容器运行时的支持,目前官方支持的容器运行时包括:Docker、Containerd、CRI-O和frakti。本次以Docker做为容器运行环境,推荐版本为Docker CE 18.09。宿主机操做系统使用CentOslinux
因为Kubernetes的master和node之间会进行大量通讯,安全作法是开放对应的通讯端口,在安全的内网环境下能够关闭防火墙服务:git
sudo systemctl disable firewalld
github
sudo systemctl stop firewalld
docker
关闭swap:swapoff -a
centos
另外,建议在主机上禁用SELinux,让容器能够读取主机的文件系统api
sudo setenforce 0
安全
解决路由异常:`bash
echo "net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 vm.swappiness=0" >> /etc/sysctl.d/k8s.conf`
sudo sysctl -p /etc/sysctl.d/k8s.conf
若报不存在目录的错误,则运行:sudo modprobe br_netfilter
复制代码
Kubernetes 从1.4版开始引入了命令行工具kubeadm,致力于简化集群安装的过程,并解决集群的高可用问题。服务器
下载yum-key.gpg和rpm-package-key.gpg
sudo wget mirrors.aliyun.com/kubernetes/…
sudo wget mirrors.aliyun.com/kubernetes/…
导入:
sudo rpm --import yum-key.gpg
sudo rpm --import rpm-package-key.gpg
安装docker环境,docker运行时环境的配置:kubernetes.io/docs/setup/…
cd /etc/yum.repos.d/
wget <https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install -y docker-ce
最后安装18.09版本,否则后面会出现各类问题。
yum list docker-ce --showduplicates|sort -r
yum install docker-ce-18.09.0 -y
复制代码
安装kubeadm和相关工具
配置yum源,yum源配置文件/etc/yum.repos.d/kubernetes.repo:
[kubernetes]
name=Kubernetes Repo
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
运行命令:yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
启动kubelet和docker服务,并开启开机启动。可是如今启动kubelet是会失败的,可先忽略
systemctl enable docker && systemtcl start docker
systemctl enable kubelet && systemtcl start kubelet
使用kubeadm config print init-defaults > init-config.yaml 初始化一份配置文件,而且修改文件中配置为:imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers,由于默认的镜像地址在国内是会被墙的。(注意,若是advertiseAddress的值配置有问题,到加入节点kubeadm join的时候会出现卡住的状况,这时候检查advertiseAddress配置的ip是否有问题)
kubeadm config images pull --config=init-config.yaml
拉取下载所需镜像。
至此,准备工做已经完毕。运行kubeadm init --config=init-config.yaml
进行初始化,如运行结果提示kubelet没启动或者启动失败,能够重启kubelet。而后运行kubeadm rest重置,再进行kubeadm init操做
安装完毕后,按照提示命令,复制配置文件到普通用户的home目录下:
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
这样就在master安装了kubernetes,可是在集群内尚未任何的node和缺少对容器网络的配置。其中值得注意的是,在kubeadm init完成后,最后几行提示信息包含了加入其余节点的指令和所要的token。若是遗忘。可用命令sudo kubeadm token create --print-join-command
从新打印出来。
新增一个节点,系统准备所需的yun源是同样的,安装的工具能够不装kubectl。安装完毕后,启动docker和kubelet服务。
为kubeadm命令生成配置文件,文件内容以下:
其中apiServerEndpoint的值是master的服务器地址,token和tlsBootstrapToken的值是master安装最后的一行信息。
kubeadm join大体的生命流程是:一、preflight checks;二、从集群中读取配置,也就是apiServerEndpoint中配置的地址中获取;也就是在master的这个配置,能够用命令kubectl -n kube-system get cm kubeadm-config -oyaml
查看。三、下载这个配置,而后写入到/var/lib/kubelet/config.yaml;四、激活kubelet。若是在第二部中,读取配置出现问题,有可能出现卡住的状况,这时要检查maste的apiServerEndpoint和node的是否一致。
node join完毕后,能够在master节点kubectl get nodes
查看节点列表和状态等
执行kubectl get nodes 你会发现master和node节点都是NoReady状态,那是由于还没安装CNI网络插件
对于CNI网络插件,可有不少选择,可参考:<kubernetes.io/docs/setup/…
这里,咱们选择weave插件,执行命令kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"
便可完成安装。
最后master上运行命令kubectl get pods --all-namespaces
看看相关的pods是否是都running状态了,不然,运行kubectl describe -n kube-system(命名空间) pods [pod名称]
查看对应pod的详细信息,通常失败缘由都是拉取镜像失败
至此,咱们简单的k8s集群已经部署完毕。。。