k8s-v1.10.11安装

Centos7 安装k8s-v1.10.11

环境说明:

win10 + vmware 虚拟机 
虚拟机系统:centos7 
master:4G 4核
node1: 8G 8核
node2: 8G 8核

至于master和node的hosts,可设置可不设置。

步骤1-6,在master、node上都要执行,步骤7,在master中执行kubectl init...、node中执行kubectl join...,其余步骤是否需要执行视情况而定,下文有详细阐述。


1、关闭防火墙
执行
systemctl stop firewalld
systemctl disable firewalld

2、禁用 selinuxswap
selinux:

  1. 临时关闭:setenforce 0
  2. 永久关闭:vi /etc/selinux/config 设置SELINUX=disabled

swap:

  1. 临时关闭 swapoff -a
  2. 永久禁用 注释掉/etc/fstab文件中“/dev/mapper/centos-swap”这一行:
  3. 重新加载:sysctl --system

3、设置路由

cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

sysctl -p /etc/sysctl.d/k8s.conf


PS:报错解决centos7添加bridge-nf-call-ip6tables出现No such file or directory

执行sysctl -p 时出现:

[root@localhost ~]# sysctl -p
sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-ip6tables: No such file or directory
sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-iptables: No such file or directory

解决方法:
安装库
yum install -y epel-release
yum install -y conntrack ipvsadm ipset jq sysstat curl iptables
启动系统模块
modprobe br_netfilter
modprobe ip_vs

[root@localhost ~]# modprobe br_netfilter
[root@localhost ~]# ls /proc/sys/net/bridge
bridge-nf-call-arptables bridge-nf-filter-pppoe-tagged
bridge-nf-call-ip6tables bridge-nf-filter-vlan-tagged
bridge-nf-call-iptables bridge-nf-pass-vlan-input-dev

执行

[root@localhost ~]# sysctl -p
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1

至此,报错解决


4、 换源

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

5、 安装组件 ( centos7)

yum install -y kubernetes-cni-0.6.0
yum install -y kubeadm-1.10.0-0 kubectl-1.10.0-0


PS:

1、如果直接执行`yum -y install  kubelet kubeadm kubectl`,会默认安装最新版本。要安装具体版本,
必须在组件后面指定版本号,如(yum install -y kubeadm-1.10.0-0)
2、安装非最新版本k8s时,kubeadm kubectl kubelet的安装顺序很重要。首先要安装适合kubelet版本的cni
因为,安装cni的时候会安装它的依赖kubelet,顺序可能导致下载的kubelet版本和cni适用版本不一致的情况

6、下载镜像
PS:如果处于墙内的环境中,则需要手动将k8s对应版本的组件镜像pull下来。如果已是墙外该步骤可忽略

创建vim pull.sh

#!/bin/bash
images=(kube-apiserver-amd64:v1.10.11 kube-scheduler-amd64:v1.10.11 \
kube-controller-manager-amd64:v1.10.11 kube-proxy-amd64:v1.10.11 k8s-dns-kube-dns-amd64:1.14.8 \
k8s-dns-dnsmasq-nanny-amd64:1.14.8 k8s-dns-sidecar-amd64:1.14.8 etcd-amd64:3.1.12 flannel:v0.10.0-amd64 \
pause-amd64:3.1)

for imageName in ${images[@]} ; do
docker pull registry.aliyuncs.com/google_containers/$imageName
docker tag  registry.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName
docker rmi  registry.aliyuncs.com/google_containers/$imageName
done

执行chmod +x pull.sh ./pull.sh

[root@node3 ~]# chmod +x pull.sh 
[root@node3 ~]# ./pull.sh 
Trying to pull repository registry.aliyuncs.com/google_containers/kube-apiserver-amd64 ... 
v1.10.11: Pulling from registry.aliyuncs.com/google_containers/kube-apiserver-amd64
90e01955edcd: Already exists 
6b53b376f822: Downloading [==>                                                ]  1.67 MB/32.65 MB
......

7、master初始化/node join加入集群
master执行:
kubeadm init --kubernetes-version=v1.10.11 --pod-network-cidr=10.244.0.0/16

[root@master ~]# kubeadm init --kubernetes-version=v1.10.11 --pod-network-cidr=10.244.0.0/16
...

node执行:
kubeadm join 192.168.221.130:6443 --token mzyzsb.v7u2jjhikm5qihj2 \ --discovery-token-ca-cert-hash sha256:cc38145dd3197bc73ed0cb85214bdf0f869331353c514713c0bef36779bf39b5

[root@master /]# kubeadm join 192.168.221.130:6443 --token mzyzsb.v7u2jjhikm5qihj2 \
>     --discovery-token-ca-cert-hash sha256:cc38145dd3197bc73ed0cb85214bdf0f869331353c514713c0bef36779bf39b5
...

PS:
1)–pod-network-cidr参数使用10.244.0.0/16,是因为选择了flannel组件,如果选其他组件,该参数要做相应的改变
2)如果想要master也可以调度pod,则运行下面命令:kubectl taint nodes --all node-role.kubernetes.io/master-
3)取消master参加调度kubectl taint node master node-role.kubernetes.io/master="":NoSchedule
4)node节点执行的kubeadm join ...命令,在master执行完kubeadm init后会输出在shell中,直接copy到node上执行即可


8、设置权限
master

1、要使kubectl适用root用户,执行
export KUBECONFIG=/etc/kubernetes/admin.conf

2、要使kubectl适用于非root用户,执行
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

node

如果需要在node节点上使用kubectl命令,需要执行以下步骤
1、将master中的文件`/etc/kubernetes/admin.conf`,scp到node节点中
2、执行master中的步骤1或2,为对应的用户授权。

查看集群信息
执行kubectl get nodes

[root@master /]# kubectl get nodes
NAME       STATUS     ROLES    AGE     VERSION
node2      NotReady   node2    6d19h   v1.10.11
node3      NotReady   node3    5d22h   v1.10.11
master     NotReady   master   6d19h   v1.10.11

PS:
1)如果不需要在node节点上使用kubectl,该步骤在node节点上可忽略。
2)该授权在公司里面很常用,应用场景有,允许非root用户使用kubectl;暴露非maser节点给用户使用kubectl。
3)查看信息时,看到几个节点的状态都是NotReady,是因为还没有安装flannel插件
4)kubectl命令使用报错:

[root@node3 ~]# kubectl get nodes
The connection to the server localhost:8080 was refused - did you specify the right host or port?

以上报错其中一个原因就是没有对相关用户进行授权,执行以上步骤即可解决。


9、安装flanel网络插件
执行
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/62e44c867a2846fefb68bd5f178daf4da3095ccb/Documentation/kube-flannel.yml

查看节点信息

[root@master /]# kubectl get nodes
NAME       STATUS     ROLES    AGE     VERSION
node2      Ready      node2    6d19h   v1.10.11
node3      Ready      node3    5d22h   v1.10.11
master     Ready      master   6d19h   v1.10.11

至此,k8s部署完成


PS:补充两个magic的命令
1)kubectl label node <node_name> node-role.kubernetes.io/<role_name>=
刚开始部署好集群的时候,kubectl get nodes看到的node的roles为None

[root@master /]# kubectl get nodes
NAME       STATUS     ROLES    AGE     VERSION
node2      NotReady   none    6d21h   v1.10.11
node3      Ready      none    5d23h   v1.10.11
master     Ready      none    6d21h   v1.10.11

该命令可以修改节点的roles属性
执行kubectl label node node2 node-role.kubernetes.io/node2=

[root@master /]# kubectl get nodes
NAME       STATUS     ROLES    AGE     VERSION
node2      NotReady   node2   6d21h   v1.10.11
node3      Ready      none    5d23h   v1.10.11
master     Ready      none    6d21h   v1.10.11

2) kubeadm token create --print-join-command
执行完kubeadm init...后会在shell中输出kubeadm join ....命令。kubeadm join ....中含有token参数,该参数有过期时间。
在master中执行以上命令可以重新生成一个完成的kubeadm join ....命令

[root@master /]# kubeadm token create --print-join-command
kubeadm join 192.168.138.131:6443 --token lrzi12.7ttonier7365bdnb     --discovery-token-ca-cert-hash sha256:5336f2fcd7a0ab24ddb551a560096d5b309bf2f30b9cefe1b346e8561960d385 

第二条命令是翻了几十篇openstack后的成果哦,后来才发现它早就偷偷藏在了kubernetes权威指南的某个角落里啦,只是写者有心看者无意罢了。更过k8s命令可参考我的kubernetes常用命令总结


元旦的时候就想写篇k8s部署的文章,一直拖到现在才完成。虽然网上质量很高的关于k8s部署的文章,但是总感觉没有把一些很细致的点描述出来。稍后会写几篇k8s相关的文章,包括不同版本不同系统下的部署、k8s相关组件介绍和应用、kubeflow部署和应用等,感兴趣的盆友们可以一起探讨探讨。

发布了31 篇原创文章 · 获赞 16 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/Urms_handsomeyu/article/details/96599699
今日推荐