1 系统准备
1.1 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
1.2 禁用SELinux
root@localhost ~]# setenforce 0 //临时关闭
[root@localhost ~]# getenforce
Permissive
[root@localhost ~]# vim /etc/sysconfig/selinux //永久关闭
将SELINUX=enforcing 改为 SELINUX=disabled 。
1.3 关闭系统Swap
Kubernetes 1.8开始要求关闭系统的Swap,如果不关闭,默认配置下kubelet将无法启动。方法一,通过kubelet的启动参数–fail-swap-on=false更改这个限制。方法二,关闭系统的Swap。
swapoff -a
并修改/etc/fstab文件,注释掉SWAP的自动挂载,使用free -m确认swap已经关闭。
1.4 安装docker
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum makecache fast
sudo yum -y install docker-ce
systemctl enable docker.service
systemctl restart docker
2 使用kubeadm部署Kubernetes
2.1 安装kubeadm和kubelet
在各节点安装kubeadm和kubelet:
# 配置源
$ cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
yum makecache fast
查看可安装的版本
yum list kubelet --showduplicates | sort -r
yum list kubeadm --showduplicates | sort -r
安装kubeadm、kubectl、kubelet:
本次部署使用1.12.2版本
# 安装指定版本
$ yum install -y kubelet-1.12.2-0 kubeadm-1.12.2-0 kubectl-1.12.2-0 ipvsadm
Kubernetes 1.8开始要求关闭系统的Swap,如果不关闭,默认配置下kubelet将无法启动。
swapoff -a
vm.swappiness=0
修改/etc/sysconfig/kubelet,加入:
KUBELET_EXTRA_ARGS=--fail-swap-on=false
# 启动
$ systemctl daemon-reload
$ systemctl enable kubelet && systemctl restart kubelet
安装完成查看需要的images
kubeadm config images list
根据查看images,可以看到所需镜像,由于网络原因,请下载我在docker hub上的镜像。
docker pull hyxxy/kube-apiserver:v1.12.2
docker pull hyxxy/kube-controller-manager:v1.12.2
docker pull hyxxy/kube-scheduler:v1.12.2
docker pull hyxxy/kube-proxy:v1.12.2
docker pull hyxxy/pause:3.1
docker pull hyxxy/etcd:3.2.24
docker pull hyxxy/coredns:1.2.2
docker pull hyxxy/coreos/flannel:v0.10.0-amd64
docker pull hyxxy/defaultbackend:1.4
docker pull hyxxy/kubernetes-dashboard-amd64:v1.10.0
docker tag hyxxy/kube-apiserver:v1.12.2 k8s.gcr.io/kube-apiserver:v1.12.2
docker tag hyxxy/kube-controller-manager:v1.12.2 k8s.gcr.io/kube-controller-manager:v1.12.2
docker tag hyxxy/kube-scheduler:v1.12.2 k8s.gcr.io/kube-scheduler:v1.12.2
docker tag hyxxy/kube-proxy:v1.12.2 k8s.gcr.io/kube-proxy:v1.12.2
docker tag hyxxy/pause:3.1 k8s.gcr.io/pause:3.1
docker tag hyxxy/etcd:3.2.24 k8s.gcr.io/etcd:3.2.24
docker tag hyxxy/coredns:1.2.2 k8s.gcr.io/coredns:1.2.2
docker tag hyxxy/flannel:v0.10.0-amd64 quay.io/coreos/flannel:v0.10.0-amd64
docker tag hyxxy/defaultbackend:1.4 k8s.gcr.io/defaultbackend:1.4
docker tag hyxxy/kubernetes-dashboard-amd64:v1.10.0 k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.0
配置
# 配置转发相关参数,否则可能会出错
$ cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
vm.swappiness=0
EOF
# 使配置生效
$ sysctl --system
# 如果net.bridge.bridge-nf-call-iptables报错,加载br_netfilter模块
$ modprobe br_netfilter
$ sysctl -p /etc/sysctl.d/k8s.conf
# 加载ipvs相关内核模块
# 如果重新开机,需要重新加载(可以写在 /etc/rc.local 中开机自动加载)
$ modprobe ip_vs
$ modprobe ip_vs_rr
$ modprobe ip_vs_wrr
$ modprobe ip_vs_sh
$ modprobe nf_conntrack_ipv4
# 查看是否加载成功
$ lsmod | grep ip_vs
2.2 初始化master节点
直接使用命令:
kubeadm init \
--kubernetes-version=v1.12.2 \
--pod-network-cidr=10.244.0.0/16 \
--apiserver-advertise-address=10.1.44.147 \
--ignore-preflight-errors=Swap
初始化成功之后根据提示可以看到加入集群的命令,请保存好
kubeadm join 10.1.44.147:6443 --token 8yuzkk.syj7fwf0lrc1kw65 --discovery-token-ca-cert-hash sha256:39122274dbb31b89dffb55be2f58e94abf07197d67b9bb734b7c11838fdd7cd7
#修改端口限制
vim /etc/kubernetes/manifests/kube-apiserver.yaml
在--service-cluster-ip-range与insecure-port间添加如下node port配置
...
- --service-cluster-ip-range=10.96.0.0/12
- --service-node-port-range=0-32767
- --insecure-port=0
....
# 重启
systemctl restart kubelet
# 如果初始化过程出现问题,使用如下命令重置:
kubeadm reset
rm -rf /var/lib/cni/ $HOME/.kube/config
# 重置kubernetes服务,重置网络。删除网络配置,link(看情况是否重置,一般上两句命令即可)
kubeadm reset
systemctl stop kubelet
systemctl stop docker
rm -rf /var/lib/cni/
rm -rf /var/lib/kubelet/*
rm -rf /etc/cni/
ifconfig cni0 down
ifconfig flannel.1 down
ifconfig docker0 down
ip link delete cni0
ip link delete flannel.1
systemctl start docker
下面的命令是配置常规用户如何使用kubectl访问集群(初始化成功后执行):
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
安装Pod Network
创建 kube-flannel.yml
然后执行
kubectl apply -f kube-flannel.yml
master node参与工作负载
kubectl describe node node1 | grep Taint
kubectl taint nodes node1 node-role.kubernetes.io/master-
安装 dashboard
新建一个空目录:certs,然后执行下面命令:
kubectl create secret generic kubernetes-dashboard-certs --from-file=certs -n kube-system
进入certs目录 创建下面两个文件
kubernetes-dashboard.yaml
kubernetes-rbac.yaml
安装启动
# 读取当前目录配置文件进行安装启动(certs目录下)
kubectl apply -f .
开启代理访问
nohup kubectl proxy --address='0.0.0.0' --accept-hosts='^*$' &
若代理端口被占用,请查看 netstat -nap | grep 8001
dashboard 访问地址
http://10.1.44.147:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/#!/login
# 获取token
kubectl -n kube-system get secret | grep kubernetes-dashboard-token
xxxxxx
kubectl describe -n kube-system secret/xxxxxx
2.3 node节点加入集群(node节点操作)
Node节点执行完 2.1后,并在mater执行完2.2后
在node节点执行加入集群命令(mater初始化成功后保存的那条命令)
kubeadm join 10.1.44.147:6443 --token 8yuzkk.syj7fwf0lrc1kw65 --discovery-token-ca-cert-hash sha256:39122274dbb31b89dffb55be2f58e94abf07197d67b9bb734b7c11838fdd7cd7
加入成功之后可在master节点查看节点状态
kubectl get nodes
如果需要从集群中移除node2这个Node执行下面的命令
在master节点上执行:
kubectl drain node2 --delete-local-data --force --ignore-daemonsets
kubectl delete node node2
在node2上执行:
kubeadm reset
ifconfig cni0 down
ip link delete cni0
ifconfig flannel.1 down
ip link delete flannel.1
rm -rf /var/lib/cni/
node节点重置同mater(注意重置完后也需启动)。
Pod fannel 问题
mkdir -p /etc/cni/net.d/
cat <<EOF> /etc/cni/net.d/10-flannel.conf
{"name":"cbr0","type":"flannel","delegate": {"isDefaultGateway": true}}
EOF
mkdir /usr/share/oci-umount/oci-umount.d -p
mkdir /run/flannel/
cat <<EOF> /run/flannel/subnet.env
FLANNEL_NETWORK=172.100.0.0/16
FLANNEL_SUBNET=172.100.1.0/24
FLANNEL_MTU=1450
FLANNEL_IPMASQ=true
EOF
可参考
https://blog.csdn.net/qq_34857250/article/details/82562514
其他命令
查看日志
journalctl -f -u kubelet
查看node
kubectl get nodes -n kube-system
查看pod
kubectl get pods -n kube-system
删除pod
kubectl delete pod tiller-deploy-6f6fd74b68-hmwzp -n kube-system
网友评论