k8s-v1.10.11安装
Centos7 安装k8s-v1.10.11环境说明:win10 + vmware 虚拟机虚拟机系统:centos7master:4G 4核node1: 8G 8核node2: 8G 8核至于master和node的hosts,可设置可不设置。步骤1-6,在master、node上都要执行,步骤7,在master中执行kubectl init...、node中执行kubect...
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、禁用 selinux 和 swap
selinux:
- 临时关闭:
setenforce 0
- 永久关闭:
vi /etc/selinux/config
设置SELINUX=disabled
swap:
- 临时关闭
swapoff -a
- 永久禁用 注释掉/etc/fstab文件中“/dev/mapper/centos-swap”这一行:
- 重新加载:
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部署和应用等,感兴趣的盆友们可以一起探讨探讨。
更多推荐
所有评论(0)