k8s v1.12.2部署与dashboard安装

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 < /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 <  /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 < /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 < /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

你可能感兴趣的:(k8s v1.12.2部署与dashboard安装)