kubernetes1.9离线部署

简介

环境信息(采用一个master节点+两个node节点)
master 192.168.2.110
node-1 192.168.2.112
node-2 192.168.2.113

操作系统版本:
centos7.3 
内核版本: 
3.10.0-327.el7.x86_64

软件版本

kubernetes v1.9
docker:17.03
kubeadm:v1.9.0
kube-apiserver:v1.9.0
kube-controller-manager:v1.9.0
kube-scheduler:v1.9.0
k8s-dns-sidecar:1.14.7
k8s-dns-kube-dns:1.14.7
k8s-dns-dnsmasq-nanny:1.14.7
kube-proxy:v1.9.0
etcd:3.1.10
pause :3.0
flannel:v0.9.1
kubernetes-dashboard:v1.8.1

采用kubeadm安装

kubeadm为kubernetes官方推荐的自动化部署工具,他将kubernetes的组件以pod的形式部署在master和node节点上,并自动完成证书认证等操作。

因为kubeadm默认要从google的镜像仓库下载镜像,但目前国内无法访问google镜像仓库,所以这里我提交将镜像下好了,只需要将离线包的镜像导入到节点中就可以了。

开始安装

所有节点操作

下载

链接:https://pan.baidu.com/s/1eUixGvo 密码:65yo

比对md5解压离线包

MD5 (k8s_images.tar.bz2) = b60ad6a638eda472b8ddcfa9006315ee

解压下载下来的离线包

yum install -y bzip2
tar -xjvf k8s_images.tar.bz2

安装docker-ce17.03(kubeadmv1.9最大支持docker-ce17.03)

安装两个依赖包

#yum install -y https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch.rpm
.
#yum install -y ftp://ftp.icm.edu.pl/vol/rzm6/linux-slc/centos/7.1.1503/cr/x86_64/Packages/libseccomp-2.2.1-1.el7.x86_64.rpm

rpm -ihv docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch.rpm
rpm -ivh docker-ce-17.03.2.ce-1.el7.centos.x86_64.rpm

修改docker的镜像源为国内的daocloud的。

curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://a58c8480.m.daocloud.io

启动docker-ce

systemctl start docker && systemctl enable docker

绑定hosts

将master和node-1、node-2绑定hosts

#vi /etc/hosts

192.168.2.110   master
192.168.2.112   node-1
192.168.2.113   node-2

master节点与node节点做互信

[root@master ~]# ssh-keygen
[root@master ~]# ssh-copy-id node-1
[root@master ~]# ssh-copy-id node-2

关闭防火墙和selinux

systemctl stop firewalld.service
systemctl disable firewalld.service
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
grep SELINUX=disabled /etc/selinux/config
setenforce 0

关闭swap

swapoff -a

配置系统路由参数,防止kubeadm报路由警告

echo "
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
" >> /etc/sysctl.conf
sysctl -p

导入镜像
docker load
docker load
docker load
docker load
docker load
docker load
docker load
docker load
docker load
docker load
docker load

安装安装kubelet kubeadm kubectl包

rpm -ivh socat-1.7.3.2-2.el7.x86_64.rpm
rpm -ivh kubernetes-cni-0.6.0-0.x86_64.rpmrpm -ivh kubelet-1.9.9-9.x86_64.rpmrpm -ivh kubectl-1.9.0-0.x86_64.rpm
rpm -ivh kubectl-1.9.0-0.x86_64.rpm
rpm -ivh kubeadm-1.9.0-0.x86_64.rpm

master节点操作

启动kubelete

systemctl enable kubelet && sudo systemctl start kubelet

开始初始化master

kubeadm init --kubernetes-version=v1.9.0 --pod-network-cidr=10.244.0.0/16

kubernetes默认支持多重网络插件如flannel、weave、calico,这里使用flanne,就必须要设置--pod-network-cidr参数,10.244.0.0/16是kube-flannel.yml里面配置的默认网段,如果需要修改的话,需要把kubeadm init的--pod-network-cidr参数和后面的kube-flannel.yml里面修改成一样的网段就可以了。

kubernetes1.9离线部署_第1张图片

发现kubelet启动不了
查看日志/var/log/message


发现原来是kubelet默认的cgroup的driver和docker的不一样,docker默认的cgroupfs,kubelet默认为systemd
修改

vi /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
kubernetes1.9离线部署_第2张图片

重启reload

systemctl daemon-reload && systemctl restart kubelet

查看状态

kubernetes1.9离线部署_第3张图片

此时记得将环境reset一下
执行

kubeadm reset

在重新执行

kubeadm init --kubernetes-version=v1.9.0 --pod-network-cidr=10.244.0.0/16
kubernetes1.9离线部署_第4张图片

将kubeadm join xxx保存下来,等下node节点需要使用
如果忘记了,可以在master上通过kubeadmin token list得到

kubernetes1.9离线部署_第5张图片

也可以从新生成一个

 
  
### 注意:kubeadm init 输出的 join 指令中 token 只有 24h 的有效期,如果过期后,需要重新生成,具体请参考:
[root@tvm-00 ~]# kubeadm token create --print-join-command
kubeadm join --token 84d7d1.e4ed7451c620436e 10.10.9.67:6443 --discovery-token-ca-cert-hash sha256:42cfdc412e731793ce2fa20aad1d8163ee8e6e5c05c30765f204ff086823c653

按照上面提示,此时root用户还不能使用kubelet控制集群需要,配置下环境变量
对于非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、calico、weave、macvlan这里我们用flannel。

下载此文件

wget https://raw.githubusercontent.com/coreos/flannel/v0.9.1/Documentation/kube-flannel.yml

或直接使用离线包里面的
若要修改网段,需要kubeadm --pod-network-cidr=和这里同步
vim kube-flannel.yml
修改network项

"Network""10.244.0.0/16",

执行

kubectl create -f kube-flannel.yml

node节点操作

使用刚刚kubeadm后的kubeadm join --xxx

kubernetes1.9离线部署_第6张图片

kubernetes1.9离线部署_第7张图片

kubernetes1.9离线部署_第8张图片

部署kubernetes-dashboard

kubernetes-dashboard是可选组件,因为,实在不好用,功能太弱了。
建议在部署master时一起把kubernetes-dashboard一起部署了,不然在node节点加入集群后,kubernetes-dashboard会被kube-scheduler调度node节点上,这样根kube-apiserver通信需要额外配置。
直接使用离线包里面的kubernetes-dashboard.yaml

修改kubernetes-dashboard.yaml

如果需要让外面访问需要修改这个yaml文件端口类型为NodePort默认为clusterport外部访问不了,

kubernetes1.9离线部署_第9张图片

nodeport端口范围30000-32767
32666就是我的映射端口,根docker run -d xxx:xxx差不多
创建kubernetes-dashboard

kubectl create -f kubernetes-dashboard.yaml

如果出现pod失败需要删除可使用以下命令

删除pod
kuberctl delete po -n kube-system
查看pod创建失败原因
# kubectl describe pod kubernetes-dashboard-845747bdd4-8gtt2 --namespace=kube-system

访问

https://master_ip:32666
kubernetes1.9离线部署_第10张图片

默认验证方式有kubeconfig和token,这里我们都不用。
这里我们使用basicauth的方式进行apiserver的验证
创建/etc/kubernetes/manifests/pki/basic_auth_file 用于存放用户名和密码

编辑basic_auth_file
#vi /etc/kubernetes/pki/basic_auth_file
admin,admin,2

user,password,userid

admin,admin,2

给kube-apiserver添加basic_auth验证

vim /etc/kubernetes/manifests/kube-apiserver.yaml
kubernetes1.9离线部署_第11张图片

加上这行

更新kube-apiserver容器

kubectl apply -f kube-apiserver.yaml

授权
k8s1.6后版本都采用RBAC授权模型
给admin授权
默认cluster-admin是拥有全部权限的,将admin和cluster-admin bind这样admin就有cluster-admin的权限。

kubernetes1.9离线部署_第12张图片

那我们将admin和cluster-admin bind在一起这样admin也拥用cluster-admin的权限了

kubectl create clusterrolebinding login-on-dashboard-with-cluster-admin --clusterrole=cluster-admin --user=admin

查看

kubectl get clusterrolebinding/login-on-dashboard-with-cluster-admin -o yaml
kubernetes1.9离线部署_第13张图片

在此访问https://master:32666

kubernetes1.9离线部署_第14张图片

选基本,就可以通过用户名和密码访问了

kubernetes1.9离线部署_第15张图片

创建个应用测试

kubernetes1.9离线部署_第16张图片

部署成功

kubernetes1.9离线部署_第17张图片

参考链接

https://kubernetes.io/docs/setup/independent/install-kubeadm/

你可能感兴趣的:(docker,K8S)