k8s的部署方式:html
kubernetes部署图node
关闭Firewalld和iptables,时间同步。linux
sudo systemctl stop firewalldgit
sudo systemctl disable firewalld`github
因为docker会大量生成iptables规则,因此要确保如下这两个配置是1docker
cat /proc/sys/net/bridge/bridge-nf-call-ip6tablescentos
cat /proc/sys/net/bridge/bridge-nf-call-iptablesapi
### 网络配置文件 cat <<EOF > /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 vm.swappiness=0 EOF modprobe br_netfilter #执行该命令 若是不执行就会在应用k8s.conf时出现加载错误 sysctl -p /etc/sysctl.d/k8s.conf #应用配置文件
修改host和hostname服务器
由于集群节点的名称会和机器的hostname一致,因此host的解释名称统一修改和hostname一致。具体为:网络
/etc/hosts文件为(全部节点都是):
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.33.30 master.k8s.com 192.168.33.31 node1.k8s.com 192.168.33.32 node2.k8s.com 127.0.0.1 node2.k8s.com
/etc/hostname为(master节点为例)
在master和nodes的机器上都要按照如下步骤,安装kubelet、kubeadm、docker-ce和kubectl(k8s客户端工具),具体步骤为:
指定docker-ce的yum仓库源
`cd /etc/yum.repos.d/
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo`
指定kubernetes的yum仓库:
`cd /etc/yum.repos.d/
Sudo vi kubernetes.repo`
kubernetes.repo的配置以下:
[kubernetes]
name=Kubernetes Repo
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
而后下载yum-key.gpg和rpm-package-key.gpg
sudo wget https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
sudo wget https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
导入:
sudo rpm --import yum-key.gpg
sudo rpm --import rpm-package-key.gpg
运行yum repolist 看下docker和kubernetes是否有包了。
运行安装命令。分别安装docker-ce,kubelet,kubeadm和kubectl(kubernetes命令行客户端)
sudo yum install docker-ce kubelet kubeadm kubectl(默认安装最新版的)
如要安装指定版本,能够:
sudo yum list kubelet --showduplicates //查看全部可用版本
sudo yum install kubelet-1.13.4-0 kubectl-1.13.4-0 kubeadm-1.13.4-0 kubernetes-cni-0.6.0-0
在启动kubelet前,看看安装了哪些文件
早期的k8s版本不容许打开swap,会直接start会报错,咱们先启动一下看看
因为kubelet相关配置还没完成,如今不能直接启动。先中止,设置开机启动先。
sudo systemctl stop kubelet
sudo systemctl enable kubelet
sudo systemctl enable docker
修改kubelet配置文件的额外参数:
sudo vi /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS="--fail-swap-on=false"
kubelet设置好后,咱们能够用kubeamd init命令拉取相关的docker组件镜像,并启动对应的pods。
sudo kubeadm init --kubernetes-version=v1.13.4 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --ignore-preflight-errors=Swap
相关参数意思:
--apiserver-advertise-address:API服务器将通知它正在监听的IP地址,监听的地址为“0.0.0.0”,即本机全部IP地址。
--apiserver-bind-port:API服务器绑定到的端口。(默认:6443)
--cert-dir:加载证书的相关目录(默认:/etc/kubernetes/pki)
--config:配置文件的路径。警告:配置文件目前属于实验性,还不稳定。
--ignore-preflight-errors:将错误显示为警告的检查列表进行忽略。例如:“IsPrivilegedUser,Swp”。Value 'all'忽略全部检查中的错误。
--pod-network-cidr:指定pod网络的IP地址范围。若是设置,控制平面将为每一个节点自动分配CIDRs。
--service-cidr:为service VIPs使用不一样的IP地址。(默认“10.96.0.0/12”)
第一次运行,由于要在拉取下载相关的镜像,因此可能有点慢,能够预先下载好相关的docker镜像。v.13.4版本的docker镜像下载地址,个人百度云盘连接:https://pan.baidu.com/s/1osvMLNALXBY8FXeN7z3H5Q 提取码:chsq
sudo docker save k8s.gcr.io/kube-apiserver > kubelet-apiserver.tar 导出镜像
sudo docker load < kubelet-apiserver.tar 导入镜像
须要的镜像有:
k8s.gcr.io/kube-proxy v1.13.4 fadcc5d2b066 4 weeks ago 80.3MB k8s.gcr.io/kube-scheduler v1.13.4 dd862b749309 4 weeks ago 79.6MB k8s.gcr.io/kube-apiserver v1.13.4 fc3801f0fc54 4 weeks ago 181MB k8s.gcr.io/kube-controller-manager v1.13.4 40a817357014 4 weeks ago 146MB k8s.gcr.io/coredns 1.2.6 f59dcacceff4 4 months ago 40MB k8s.gcr.io/etcd 3.2.24 3cab8e1b9802 6 months ago 220MB k8s.gcr.io/pause 3.1 da86e6ba6ca1 15 months ago 742kB
初始化完成后,会有如下信息
建立kube目录,添加kubectl配置,建议用普通用户运行如下三个命令:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
如没执行以上三个命令,直接查看nodes信息,会报错:
The connection to the server localhost:8080 was refused - did you specify the right host or port?
运行后,再次查看nodes信息(kubectl get nodes),会如今master的状态信息是noready,这个是由于缺乏附件flannel
添加网络附件flannel
访问flannel的github:https://github.com/coreos/flannel,此处也有介绍怎么安装
若是Kubernetes版本是1.7以上执行这行命令便可,在线自动获取部署清单,而后基于此清单下载镜像启动并部署
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
咱们在期间用这些命令看看flannel附件服务是否下载和启动好了:
docker images
kubectl get pods --all-namespaces 查看全部名称空间的pods,能够看看flannel的pods是否已经running了
kubectl get ns 查看有哪些命名空间,其中系统级别的pods都在kube-system中
至此咱们的master就算已经配置完毕了。。。
nodes机器上都要按照第二大步骤(配置好yum源和kubelet),安装kubelet、kubectl、kubeadm和docker-ce
运行命令:
sudo kubeadm join 10.0.2.15:6443 --token 9le8zj.k1y8fvr09b4h4pww --discovery-token-ca-cert-hash sha256:10187a814644dab00611161c3079fdeeef579b999c6c506c33ff55dd9bb032fa --ignore-preflight-errors=Swap
把节点nodes加入,等nodes的机器拉取完镜像后,这个节点就加入完毕了。能够用这个命令查看更多pods的扩展信息:
kubectl get pods -n kube-system -o wide
咱们在master节点上运行:kubectl get nodes ,能够看到节点已经成功加入
至此,咱们简单的k8s集群已经部署完毕。。。
sudo netstat -ntlp | grep LISTEN 查看监听的端口
kubectl get pods -n kube-system -o wide 查看pods的更多扩展信息
kubectl get ns 获取全部的命名空间
sudo yum list kubelet --showduplicates //查看全部yum包的可用版本
kubectl get pods --all-namespaces 查看全部命名空间下的pods