1 环境准备
节点 |
主机名 |
IP |
OS |
Master |
k8s-master |
192.168.57.1 |
centos 7 |
Node1 |
k8s-node-1 |
192.168.57.2 |
centos 7 |
2 离线包下载
我已经整理好需要的可以@我
3 设置主机名
Master上执行:hostnamectl --static set-hostname k8s-master
Node1上执行:hostnamectl --static set-hostname k8s-node-1
重启
4 分别修改节点的hosts文件,并使内容保持一致
# 编辑hosts文件
# 新增下面的内容,wq保存。
192.168.57.1 k8s-master
192.168.57.2 k8s-node-1
5 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
6 master节点与node节点做互信
ssh-keygen
ssh-copy-id k8s-node-1
下面7-13步需要在Master和Node上都执行
7 关闭selinux
# 编辑config文件
将SELINUX=enforcing改为SELINUX=disabled,wq保存。
# 当前临时关闭selinux(不重启临时关闭selinux的方式)
8 关闭swap
# 当前临时关闭虚拟内存
若不关闭下面初始化master的时候会存在下图的错误:
# 修改/etc/fstab文件
# 加#注释掉下面的语句屏蔽SWAP的自动挂载,wq保存
#/dev/mapper/centos-swap swapswapdefaults0 0
9 配置路由参数,防止kubeadm报路由警告
# 将内容写入k8s.conf文件
cat <<EOF > /etc/sysctl.d/k8s.confnet.bridge.bridge-nf-call-ip6tables = 1net.bridge.bridge-nf-call-iptables = 1EOF
# 立即生效
10 安装docker
rpm -ihv docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch.rpm
发现缺少依赖包的错误
在mypackages目录下执行
yum -y install *.rpm
然后再执行
rpm -ihv docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch.rpm
rpm -ihv docker-ce-17.03.2.ce-1.el7.centos.x86_64.rpm
若出现下图情况需要先执行以下 rpm -ihv libtool-ltdl-2.4.2-22.el7_3.x86_64.rpm
systemctl start docker && systemctl enable docker
docker version
11 导入镜像
在k8s_images/docker_images目录下执行
for i in $(ls *.tar);do docker load < $i;done
12 安装kubelet kubectl kubeadm包
在k8s_images目录下执行
rpm -ivh socat-1.7.3.2-2.el7.x86_64.rpm
rpm -ivh kubernetes-cni-0.6.0-0.x86_64.rpm kubelet-1.9.9-9.x86_64.rpm kubectl-1.9.0-0.x86_64.rpm
rpm -ivh kubeadm-1.9.0-0.x86_64.rpm
13 启动kubelet
systemctl start kubelet && sudo systemctl enable kubelet
14 初始化Master(Master执行)
kubeadm init --kubernetes-version=v1.9.0 --pod-network-cidr=10.244.0.0/16
我执行的时候出现没有默认路由的错误,最后发现是我设置静态IP的时候忘了分配网关导致的,设置好网关重新执行
发现存在错误
cat /var/log/message
是kubelet默认的cgroup的driver和docker的不一样导致的,docker默认的cgroupfs,kubelet默认为systemd,编辑10- kubeadm.conf修改为cgroupfs (node也需要修改)
vi /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
重启
systemctl daemon-reload && systemctl restart kubelet
环境reset
kubeadm reset
重新初始化
kubeadm init --kubernetes-version=v1.9.0 --pod-network-cidr=10.244.0.0/16
kubeadm join 这句话要记录下来 node节点加入master的时候要用到
忘了可以通过 kubeadm token list查看
默认token 24小时就会过期,后续的机器要加入集群需要重新生成token
kubeadm token create
查看kubelet状态
systemctl status kubelet
15 此时root用户还不能使用kubelet控制集群需要,配置下环境变量(Master执行)
对于非root用户
mkdir -p $HOME/.kubecp -i /etc/kubernetes/admin.conf $HOME/.kube/configchown $(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查看版本
![](https://img-blog.csdn.net/20180402135008207?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NoZW5fMjVfMTU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
16 安装网络,可以使用flannel、calico、weave、macvlan这里我用的flannel(Master执行)
kube-flannel.yml里面的网段要和 kubeadm --pod-network-cidr设置的一致 默认是10.244.0.0/16
在k8s_images目录下执行
kubectl create -f kube-flannel.yml
17 节点加入Master(Node执行)
执行上面保存的kubeadm join 这句话
kubeadm join --token f22fa7.6a1d26bae177b5f4 192.168.57.1:6443 --discovery-token-ca-cert-hash sha256:2043570da1eaebcf9229910b68b0840cc1080712f20e682504be317aae824d9c
18 验证node 和pod 如下图代表Kubernetes 1.9.0 离线安装成功(Master执行)
kubectl get nodes
kubectl get pods --all-namespaces
docker ps
19 部署kubernetes-dashboard(Master执行)
编辑kubernetes-dashboard.yaml 设置type为 NodePort ,设置在范围30000-32767内的任意端口,我设置的是32000,(端口范围可以通过kube-apiserver.yaml修改)
kubectl create -f kubernetes-dashboard.yaml
设置验证方式默认验证方式有kubeconfig和token,这里都不用,我们使用basicauth的方式进行apiserver的验证。
创建/etc/kubernetes/pki/basic_auth_file, 用于存放用户名、密码、用户ID。
echo 'admin,admin,2' > /etc/kubernetes/pki/basic_auth_file
编辑kube-apiserver.yaml,给kube-apiserver添加basic_auth验证
vi /etc/kubernetes/manifests/kube-apiserver.yaml
![](https://img-blog.csdn.net/20180426143145532?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NoZW5fMjVfMTU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
添加- --basic_auth_file=/etc/kubernetes/pki/basic_auth_file,wq保存。保存后若API pod停止了
然后重启kubelet服务:
systemctl restart kubelet ,kubelet 会重启 kube-apiserver Pod
ps:-与--之间的不是空格
更新apiserver
kubectl apply -f /etc/kubernetes/manifests/kube-apiserver.yaml
授权,k8s 1.6以后的版本都采用RBAC授权模型,给admin授权默认cluster-admin是拥有全部权限的,将admin和cluster-admin bind这样admin就有cluster-admin的权限。
kubectl create clusterrolebinding login-on-dashboard-with-cluster-admin --clusterrole=cluster-admin --user=admin
验证apiserver
curl --insecure https:
通过火狐浏览器访问https:
基本下面输入用户名密码登录后页面
注:由于我在当前主机上装的时候忘了一些截图,所以上面部分截图是我在别的上装的时候的截图