参考1 参考2
架构规划
k8s至少需要一个Master和一个Node才能组成一个可用集群,本文搭建一个Master节点和一个Node节点。采用vmware新建的两个centos7虚拟机进行部署,部署之前参考下面的链接将虚拟机IP地址配置静态IP,防止在dhcp模式下,重启后IP地址发生改变。
一 、环境准备
节点 | 主机名 | IP | OS |
Master | k8s-1 | 192.168.203.222 | centos 7 |
Node1 | k8s-2 | 192.168.203.223 | centos 7 |
二、离线包下载
参考此链接1:链接:https://pan.baidu.com/s/1lty5BLoz4eSBC7fKpSfj8A 提取码:eftw,
参考此链接2:链接: https://pan.baidu.com/s/19CRg4v3oACVSfZal_zi9oQ 提取码: 132g,
在此也感谢两位前辈的无私奉献,本文需要这两个连接中的文件
三、设置主机名
//root权限下
//Master上执行:
hostnamectl --static set-hostname k8s-1
//重启
reboot
//Node1上执行:
hostnamectl --static set-hostname k8s-2
//重启
reboot
四、分别修改节点的hosts文件,并使内容保持一致
//Master、Node1编辑hosts文件
vi /etc/hosts
//新增下面的内容,wq保存。
192.168.203.222 k8s-1
192.168.203.223 k8s-2
五、关闭防火墙
//Master、Node1执行
systemctl stop firewalld && systemctl disable firewalld
六、安装docker(master&node)
cd k8s_images
rpm -ihv docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch.rpm
发现缺少依赖包的错误
则:
cd mypackages
yum -y install *.rpm
已加载插件:fastestmirror, langpacks
正在检查 audit-libs-python-2.7.6-3.el7.x86_64.rpm: audit-libs-python-2.7.6-3.el7.x86_64
audit-libs-python-2.7.6-3.el7.x86_64.rpm:不更新已安装的软件包。
正在检查 checkpolicy-2.5-4.el7.x86_64.rpm: checkpolicy-2.5-4.el7.x86_64
checkpolicy-2.5-4.el7.x86_64.rpm:不更新已安装的软件包。
正在检查 libcgroup-0.41-13.el7.x86_64.rpm: libcgroup-0.41-13.el7.x86_64
libcgroup-0.41-13.el7.x86_64.rpm:不更新已安装的软件包。
正在检查 libseccomp-2.3.1-3.el7.x86_64.rpm: libseccomp-2.3.1-3.el7.x86_64
libseccomp-2.3.1-3.el7.x86_64.rpm:不更新已安装的软件包。
正在检查 libsemanage-python-2.5-8.el7.x86_64.rpm: libsemanage-python-2.5-8.el7.x86_64
libsemanage-python-2.5-8.el7.x86_64.rpm:不更新已安装的软件包。
正在检查 policycoreutils-python-2.5-17.1.el7.x86_64.rpm: policycoreutils-python-2.5-17.1.el7.x86_64
policycoreutils-python-2.5-17.1.el7.x86_64.rpm:不更新已安装的软件包。
正在检查 python-IPy-0.75-6.el7.noarch.rpm: python-IPy-0.75-6.el7.noarch
python-IPy-0.75-6.el7.noarch.rpm:不更新已安装的软件包。
正在检查 setools-libs-3.3.8-1.1.el7.x86_64.rpm: setools-libs-3.3.8-1.1.el7.x86_64
setools-libs-3.3.8-1.1.el7.x86_64.rpm:不更新已安装的软件包。
错误:无须任何处理
cd k8s_images
rpm -ihv docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch.rpm
准备中... ################################# [100%]
软件包 docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch 已经安装
rpm -ihv docker-ce-17.03.2.ce-1.el7.centos.x86_64.rpm
准备中... ################################# [100%]
正在升级/安装...
1:docker-ce-17.03.2.ce-1.el7.centos ( 2%################################# [100%]
//若出现下图情况需要先执行
rpm -ihv libtool-ltdl-2.4.2-22.el7_3.x86_64.rpm
systemctl start docker && systemctl enable docker
docker version
Client:
Version: 17.03.2-ce
API version: 1.27
Go version: go1.7.5
Git commit: f5ec1e2
Built: Tue Jun 27 02:21:36 2017
OS/Arch: linux/amd64
Server:
Version: 17.03.2-ce
API version: 1.27 (minimum version 1.12)
Go version: go1.7.5
Git commit: f5ec1e2
Built: Tue Jun 27 02:21:36 2017
OS/Arch: linux/amd64
Experimental: false
七、加载镜像(master&node)
加载镜像文件(一共10个镜像)
cd k8s/
for i in $(ls *.tar); do docker load < $i ; done
八、环境配置(master&node)
安装kubelet kubeadm kubectl及其组件
cd k8s/kube_adm&let&ctl
rpm -ivh *.rpm
启动kublet,并开机自启动
systemctl start kubelet && systemctl enable kubelet
centos7用户需要设置路由(安装bridge-utils)
cd k8s/
rpm -ivh bridge-utils-1.5-9.el7.x86_64.rpm
加载br_netfilter模块,使用lsmod查看开启的模块
modprobe br_netfilter
配置路由参数,防止kubeadm报路由警告
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
使得上述命令生效
sysctl --system
关闭selinux
setenforce 0
sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
k8s要求关闭swap
swapoff -a && sysctl -w vm.swappiness=0
sed -ri '/^[^#]*swap/s@^@#@' /etc/fstab
修改docker的驱动
vi /etc/docker/daemon.json
#加入下面的内容:
{ "exec-opts": ["native.cgroupdriver=systemd"] }
重启docker
systemctl restart docker && systemctl status docker
九、安装k8s集群master节点
初始化
kubeadm init --pod-network-cidr 10.244.0.0/16 --kubernetes-version 1.15.0
初始化完配置kubectl环境(master&node)
将master下/etc/kubernetes路径下的内容拷贝到每个node节点的相同路径下
//对于非root用户
su 非root用户
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
//对于root用户
export KUBECONFIG=/etc/kubernetes/admin.conf
//也可以直接放到~/.bash_profile
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
//source一下环境变量
source ~/.bash_profile
//查看版本
kubectl version
配置网络,应用flannel网络
kubectl apply -f kube-flannel.yml
十、node节点加入k8s集群
下述命令在master节点 kubeadm init 时产生,在node上输入
kubeadm join 192.168.233.145:6443 --token 0kv4cf.d5tkaw8k2u32w6qh --discovery-token-ca-cert-hash sha256:3484677e27c15e09d7c413932f2301be44a7f5291b005e3d44cd109c20797f64
十一、安装dashboard
用于存放用户名、密码、用户ID
echo "admin,admin,1" > /etc/kubernetes/pki/basic_auth_file
编辑kube-apiserver.yaml,给kube-apiserver添加basic_auth验证
vi /etc/kubernetes/manifests/kube-apiserver.yaml
在镜像之前加入
- --basic-auth-file=/etc/kubernetes/pki/basic_auth_file
创建集群角色权限绑定
kubectl create clusterrolebinding login-on-dashboard-with-cluster-admin --clusterrole=cluster-admin --user=admin
应用yaml文件中的配置
cd k8s/
kubectl apply -f recommended.yaml
查看pod和service
kubectl get pod -n kubernetes-dashboard -o wide
kubectl get svc -n kubernetes-dashboard -o wide
打开火狐浏览器
https://192.168.203.223:30001 (dashboard部署节点的IP)