使用kubeadm安装k8s集群

2019-07-16  本文已影响0人  Raphael_yf

今天按照网上的教程使用kubeadm安装了K8s集群,记录安装操作如下:
附上原地址:https://www.kubernetes.org.cn/5551.html

准备工作

配置主机名后,在每个机器上添加hosts,如下:

192.168.8.117 master-192-168-8-117
192.168.8.38 node-192-168-8-38
192.168.8.52 node-192-168-8-52
systemctl stop firewalld
systemctl disable firewalls
setenforce 0
vim /etc/selinux/config
  SELINUX=disabled

注意:修改selinux/config文件后需要重启系统生效,临时调整使用setenforce 0

net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness = 0
modprobe br_netfilter
sysctl -p

注:如实在不想关闭swap,或对机器上其他应用有影响,可修改kubelet配置,去掉对swap的限制,修改/etc/sysconfig/kubelet,加上如下配置

KUBELET_EXTRA_ARGS=--fail-swap-on=false
modprobe ip_vs
modprobe ip_vs_rr
modprobe ip_vs_wrr
modprobe ip_vs_sh
modprobe nf_conntrack_ipv4

通过lsmod | grep -e ip_vs -e nf_conntrack_ipv4命令查看系统是否成功加载响应模块
另外需要安装ipvsadm用于管理ipvs配置
如果以上条件无法满足,及时kube-proxy开启了ipvs,也会回退到iptables

yum install yum-utils
yum-config-manager --add-repo  https://download.docker.com/linux/centos/docker-ce.repo
yum install docker-ce
systemctl enable docker
{"exec-opts": ["native.cgroupdrivers=systemd"] }

重启docker后可以通过docker info命令查看

安装K8s

[K8s]
name = K8s repo
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0

设置kubelet的开机自启动

systemctl enable kubelet
apiVersion: kubeadm.k8s.io/v1beta2
bootstrapTokens:
- groups:
  - system:bootstrappers:kubeadm:default-node-token
  token: abcdef.0123456789abcdef
  ttl: 24h0m0s
  usages:
  - signing
  - authentication
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: 192.168.8.117         #定义API地址为master节点
  bindPort: 6443
nodeRegistration:
  criSocket: /var/run/dockershim.sock
  name: master-192-168-8-117
  taints:
  - effect: NoSchedule
    key: node-role.kubernetes.io/master
---
apiServer:
  timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns:
  type: CoreDNS
etcd:
  local:
    dataDir: /var/lib/etcd
imageRepository: k8s.gcr.io
kind: ClusterConfiguration
kubernetesVersion: v1.15.0        #修改版本号,默认还是v1.14
networking:
  dnsDomain: cluster.local
  serviceSubnet: 10.96.0.0/12     #定义service/pod的网络地址,其中pod地址必须和后面的flannel地址段相同
  podSubnet: 10.244.0.0/16
scheduler: {}

使用命令kubeadm init --config kubeadm.yaml命令即可进入集群初始化阶段;
安装命令输出的提示,创建~/.kube目录,并复制kube.config文件到目录下就完成了kubelet的配置。
最后的节点加入集群的命令一定要保存下来,后续如需要扩容也通过改命令完成;

因默认使用的镜像无法正常访问,我们可以先把镜像从阿里云镜像站pull下来,在修改tag的方式;
使用kubeadm config images list命令获取到安装所需的镜像列表,并写入image.list文件,将以下脚本copy到同目录下执行即可

cat image.list | while read line
do
    aliImage=`echo $line |sed "s/k8s.gcr.io/registry.cn-hangzhou.aliyuncs.com\/google_containers/g"`
    docker pull $aliImage
    docker tag $aliImage $line
done

初始化完成后可通过命令查看集群状态

kubectl  get cs
NAME                 STATUS    MESSAGE             ERROR
controller-manager   Healthy   ok
scheduler            Healthy   ok
etcd-0               Healthy   {"health":"true"}
curl -O https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
kubectl apply -f kube-flannel.yml

如果集群存在多个网卡,需要在kube-flannel.yml中指定内网网卡,在flannel的启动参数中增加-iface=eth0
使用kubectl get pod -n kube-system可以查看flannel的pod处于running状态即安装成功,
此时通过kubectl get node可以看到master节点已经处于ready状态

kubectl drain node-192-168-8-52 --delete-local-data --force --ignore-daemonsets
kubectl delete node  node-192-168-8-52

在node节点上清空配置

kubeadm reset
ifconfig flannel.1 down
ip link delete flannel.1

在其他node上执行

kubeadm delete node node-192-168-8-52
kubectl edit configmap kube-proxy -n kube-system

将其中的mode修改为mode:"ipvs"
再重启各节点上的kube-proxy
kubectl get pod -n kube-system | grep kube-proxy | awk '{system("kubectl delete pod "$1" -n kube-system")}'
重启完成,后查看kube-proxy的log日志,如有输出Using ipvs Proxier说明已经开启了ipvs,
在node上可以通过ipvsadm -Ln查看转发配置

上一篇 下一篇

猜你喜欢

热点阅读