k8s新的版本与之前1.5的部署方式发生改变,官方将kubernetes大组件中的服务例如(kube-proxy、kube-api等服务)剥离出来封装成容器的形式来简化部署的方式。以下为三个必装的服务:
kubelet :运行在 Cluster 所有节点上,主要负责启动 Pod 和容器。
kubeadm :用于初始化和引导Cluster(是官方推出快速部署k8s集群,其本 质是将k8s的相关服务容器化)
kubectl :是 Kubernetes 命令行工具与api交互。通过 kubectl 可以部署和管理应用,查看各种资源,创建、删除和更新各种组件
注意:两台机器的时间一定要一致,并且docker-ce的版本不能大于17.03(如果是搭建k8s v1.9.6版本 切记!!),docker可以使用官方的源进行安装,安装的时候指定需要安装的版本,或者使用rpm包安装即可。
安装配置
系统环境:centos7.3
1)配置准备
1. 修改host文件和主机名称
hostnamectl set-hostname 主机名
时间同步 ntpdate 0.asia.pool.ntp.org
然后重启服务端
2. 关闭firewalld
systemctl stop firewalld
systemctl disable firewalld
3. 关闭swap(重启机器后,记得一定要再次执行,这种这是临时的关闭swap)
swapoff -a
4. 关闭selinux
setenforce 0
5. 添加kubernetes源
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
2)Docker 安装
2、docker 安装 填坑
### 低版本的docker -要先安装docker-ce-selinux-17.03.2.ce,否则安装docker-ce会报错
yum -y install https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch.rpm
yum makecache fast && yum install docker-ce-17.03.0.ce
3、执行完上述步骤后 检查服务状态,并启动docker。
docker -version 查看版本
systemctl status docker 查看启动状态
systemctl start docker 启动docker
systemctl enable docker 设置开机启动
3)K8S 安装
1、修改参数 配置位置 Master 和 node
修改内核两个参数(这两个是参数是防止应用部署在centos系统情况下由于iptables被绕过而导致的路由错误)
简单的说就是使流过网桥的流量也进入iptables/netfilter框架中:
执行:
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
执行:
sysctl --system
2、安装组件
配置位置 Master 和 node:
yum makecache fast && yum install -y kubelet-1.9.6 kubeadm-1.9.6 kubectl-1.9.6 kubernetes-cni-0.6.0
#确保kubelets使用的cgroup-driver和docker使用的cgroup-driver一样:
sed -i "s/cgroup-driver=systemd/cgroup-driver=cgroupfs/g" /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
查看对应的版本是否一致
kubeadm version
kubelet --version
kubectl version
3、启动kubelet服务:
配置位置 Master 和 node
swapoff -a
systemctl daemon-reload
systemctl start kubelet
systemctl enable kubelet
/************************************ 上述步骤 每个节点都的执行 !!!!**************************************************/
4 、集群初始化:(Master节点执行)配置位置 Master
### 在初始化之如果卡顿 ,很可能是低版本需要下载镜像 ,需要下载的镜像都在我的/images.sh脚本里面,下载执行即可(将下载的镜像已经修改tag了 )
然后于执行权限 chmod -R 777 ./images.sh
kubeadm init --kubernetes-version=v1.9.6 --apiserver-advertise-address 192.168.182.131 --pod-network-cidr=10.244.0.0/16
说明: --apiserver-advertise-address
指明用Master的哪个interface与Cluster 的其他节点通信
说明: –pod-network-cidr
指定Pod网络的范围k8s支持多种网络方案不同的网络方案对这个配置有不同的要求,这里设置为 10.244.0.0/16是因为我们将使用flanne 网络方案,所以设置成这个 CIDR。
####问题一: 如果提示(端口占用)或者文件已存在
初始化 Kubernetes 问题(端口占用)或者文件已存在
解决方法:kubeadm reset 然后再执行初始化操作。
--------------------- 这一步 坑比较多 ----------------------
主要查看日志提示 tail -f /var/log/message
5、root用户还不能使用kubelet控制集群,需要配置下环境变量:
$mkdir -p $HOME/.kube
$cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$chown $(id -u):$(id -g) $HOME/.kube/config
6、部署pod网络
配置位置 Master 和 Node
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
node节点执行:Node节点上执行如下加入:
kubeadm join --token 9f7a7b.b33f0746688759ad 192.168.182.131:6443 --discovery-token-ca-cert-hash sha256:fdb8bb2dfbbe1d2a5c532b24cb1db90d560d33ea95d5b58ae987b7a8f2448b97

###问题一:
如果node节点一直是NoReady状态 ,在node 节点上执行 systemctl status kubectl 查看状态
如果node节点的kubectl 服务一会儿启动一会儿停止 (可能是网络没有准备好,检查flannel网络),分析日志查询命令:
journalctl -xefu kubelet
下一节:将写一篇关于kubernetes-dashboard的安装和登录
有问题联系方式 qq: 370217838