Kubeadm部署Kubernetes集群
Kubeadm部署Kubernetes1.14.1集群
原理
kubeadm做为集群安装的“最佳实践”工具,目标是通过必要的步骤来提供一个最小可用的集群运行环境。它会启动集群的基本组件以及必要的附属组件,至于为集群提供更丰富功能(比如监控,度量)的组件,不在其安装部署的范围。在环境节点符合其基本要求的前提下,kubeadm只需要两条基本命令便可以快捷的将一套集群部署起来。
这两条命令分别是:
kubeadm init:初始化集群并启动master相关组件,在计划用做master的节点上执行。
kubeadm join:将节点加入上述集群,在计划用做node的节点上执行。
一、环境说明
主机名 | IP地址 | 角色 | 系统 |
---|---|---|---|
k8s-node-1 | 192.168.11.131 | k8s-master | Centos7.6 |
k8s-node-2 | 192.168.11.134 | k8s-node | Centos7.6 |
k8s-node-3 | 192.168.111.133 | k8s-node | Centos7.6 |
注意:官方建议每台机器至少双核2G内存,同时需确保MAC和product_uuid唯一(参考下面的命令查看)
ip link cat /sys/class/dmi/id/product_uuid
注:Kubernetes大致有以下几种安装方式:
直接yum安装,yum install -y kubernetes 这样最快,但是此版本较低
去github上下载,用ansible部署安装,但需要对ansible有一定的了解
在每个节点(Master/Node)上按组件逐一安装,慎用,有可能会崩溃,特别复杂,而且还不一定搞好。
利用一些提供的安装工具来安装,如kubeadm,下边介绍这个安装方式
二、环境配置
以下命令在三台主机上均需运行
1、设置阿里云yum源(可选)
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo rm -rf /var/cache/yum && yum makecache && yum -y update && yum -y autoremove
2、安装依赖包
yum install -y epel-release conntrack ipvsadm ipset jq sysstat curl iptables libseccomp
3、关闭防火墙
systemctl stop firewalld && systemctl disable firewalld iptables -F && iptables -X && iptables -F -t nat && iptables -X -t nat && iptables -P FORWARD ACCEPT
4、关闭SELinux
setenforce 0 sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
5、关闭swap分区
swapoff -a sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
6、加载内核模块
modprobe br_netfilter modprobe ip_vs modprobe ip_vs_rr modprobe ip_vs_wrr modprobe ip_vs_sh modprobe nf_conntrack_ipv4 cat > /etc/sysconfig/modules/ipvs.modules <<EOF #!/bin/bash modprobe -- ip_vs modprobe -- ip_vs_rr modprobe -- ip_vs_wrr modprobe -- ip_vs_sh modprobe -- nf_conntrack_ipv4 modprobe -- br_netfilter EOF chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules
7、设置内核参数
cat << EOF | tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-iptables=1 net.bridge.bridge-nf-call-ip6tables=1 net.ipv4.ip_forward=1 net.ipv4.tcp_tw_recycle=0 vm.swappiness=0 vm.overcommit_memory=1 vm.panic_on_oom=0 fs.inotify.max_user_watches=89100 fs.file-max=52706963 fs.nr_open=52706963 net.ipv6.conf.all.disable_ipv6=1 net.netfilter.nf_conntrack_max=2310720 EOF sysctl -p /etc/sysctl.d/k8s.conf
8、安装Docker
1、首先卸载旧版:
yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-selinux \ docker-engine-selinux \ docker-engine
2、安装依赖包:
yum install -y yum-utils device-mapper-persistent-data lvm2
3、设置安装源(阿里云):
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
4、启用测试库(可选):
yum-config-manager --enable docker-ce-edge yum-config-manager --enable docker-ce-test
5、安装:
yum makecache fast yum install -y docker-ce 安装docker最新版
6、启动:
systemctl start docker
开机自启
systemctl enable docker
Docker建议配置阿里云镜像加速
安装完成后配置启动时的命令,否则docker会将iptables FORWARD chain的默认策略设置为DROP
另外Kubeadm建议将systemd设置为cgroup驱动,所以还要修改daemon.json
sed -i "13i ExecStartPost=/usr/sbin/iptables -P FORWARD ACCEPT" /usr/lib/systemd/system/docker.service mkdir -p /etc/docker tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://bk6kzfqm.mirror.aliyuncs.com"], "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2", "storage-opts": [ "overlay2.override_kernel_check=true" ] } EOF systemctl daemon-reload systemctl restart docker
9、安装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=0 repo_gpgcheck=0 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 install -y kubelet kubeadm kubectl systemctl enable kubelet
10、拉取所需镜像
先从阿里云拉取所需的镜像,不然会从谷歌拉取,导致拉取失败。
拉取镜像:
kubeadm config images list | sed -e 's/^/docker pull /g' -e 's#k8s.gcr.io#registry.cn-hangzhou.aliyuncs.com/google_containers#g' | sh -x docker images | grep registry.cn-hangzhou.aliyuncs.com/google_containers | awk '{print "docker tag",$1":"$2,$1":"$2}' | sed -e 's/registry.cn-hangzhou.aliyuncs.com\/google_containers/k8s.gcr.io/2' | sh -x docker images | grep registry.cn-hangzhou.aliyuncs.com/google_containers | awk '{print "docker rmi """$1""":"""$2}' | sh -x
三、初始化集群
以下命令如无特殊说明,均在k8s-node-1上执行
1、使用kubeadm init初始化集群(注意修改最后为本机IP)
kubeadm init \ --kubernetes-version=v1.14.1 \ --pod-network-cidr=10.244.0.0/16 \ --apiserver-advertise-address=192.168.11.128
初始化成功后会输出类似下面的加入命令,暂时无需运行,先记录。
kubeadm join 192.168.11.131:6443 --token duz8m8.njvafly3p2jrshfx --discovery-token-ca-cert-hash sha256:60e15ba0f562a9f29124914a1540bd284e021a37ebdbcea128f4e257e25002db
2、为需要使用kubectl的用户进行配置
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOM![](/Uploads/Images/Content/201910/28/a6f52265b3ed06412aea4908d6eb2253) E/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
检查集群状态
kubectl get cs
3、安装Pod Network(使用七牛云镜像)
curl -o kube-flannel.yml https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml sed -i "s/quay.io\/coreos\/flannel/quay-mirror.qiniu.com\/coreos\/flannel/g" kube-flannel.yml kubectl apply -f kube-flannel.yml rm -f kube-flannel.yml
使用下面的命令确保所有的Pod都处于Running状态,可能要等到许久。
kubectl get pod --all-namespaces -o wide
4、向Kubernetes集群中添加Node节点
在k8s-node-2和k8s-node-3上运行之前在k8s-node-1输出的命令
kubeadm join 192.168.11.131:6443 --token duz8m8.njvafly3p2jrshfx --discovery-token-ca-cert-hash sha256:60e15ba0f562a9f29124914a1540bd284e021a37ebdbcea128f4e257e25002db
在k8s-node1上查看集群中的节点状态,可能要等等许久才Ready
kubectl get nodes ![](https://s1.51cto.com/images/blog/201905/15/1f4dc5c14adedd1ba0c91e44316884da.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=) 如果添加集群失败,重置从节点配置 kubeadm reset
5、kube-proxy开启ipvs
kubectl get configmap kube-proxy -n kube-system -o yaml > kube-proxy-configmap.yaml sed -i 's/mode: ""/mode: "ipvs"/' kube-proxy-configmap.yaml kubectl apply -f kube-proxy-configmap.yaml rm -f kube-proxy-configmap.yaml kubectl get pod -n kube-system | grep kube-proxy | awk '{system("kubectl delete pod "$1" -n kube-system")}'
四、部署kubernetes-dashboard
1、生成访问证书
grep 'client-certificate-data' ~/.kube/config | head -n 1 | awk '{print $2}' | base64 -d >> kubecfg.crt grep 'client-key-data' ~/.kube/config | head -n 1 | awk '{print $2}' | base64 -d >> kubecfg.key openssl pkcs12 -export -clcerts -inkey kubecfg.key -in kubecfg.crt -out kubecfg.p12 -name "kubernetes-client"
将生成的kubecfg.p12证书导入到Windows中,直接双击打开,下一步导入即可。
注意:导入完成后需重启浏览器。
2、生成访问Token
新建文件admin-user.yaml:
apiVersion: v1 kind: ServiceAccount metadata: name: admin-user namespace: kube-system --- apiVersion: rbac.authorization.k8s.io/v1beta1 kind: ClusterRoleBinding metadata: name: admin-user roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: admin-user namespace: kube-system
创建角色及绑定账号
kubectl create -f admin-user.yaml
获取Token
kubectl describe secret admin-user --namespace=kube-system
此次先记录下生成的Token,一会登录要用
3、部署kubernetes-dashboard
curl -o kubernetes-dashboard.yaml https://raw.githubusercontent.com/kubernetes/dashboard/master/aio/deploy/recommended/kubernetes-dashboard.yaml vi kubernetes-dashboard.yaml 修改image: k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.1为: image: mirrorgooglecontainers/kubernetes-dashboard-amd64:v1.10.1 kubectl apply -f kubernetes-dashboard.yaml
4、访问
192.167.11.131为MasterIP,6443为apiserver-port
然后在登录选项中选择令牌登录,复制进刚刚生成的令牌即可。
注:如果访问不了网站,则
查所有的Pod确保都处于Running状态,如果 pod kubectl get pod --all-namespaces -o wide不是Running状态则删除再新建
kubectl get pod --all-namespaces -o wide
删
kubectl delete pod kubernetes-dashboard-68ddcc97fc-bqxsd
重新起kubernetet-dashboard
kubectl apply -f kubernetes-dashboard.yaml
如果kubernetes-dashboard-68ddcc97fc-bqxsd 还是起不来则导入
docker pull mirrorgooglecontainers/kubernetes-dashboard-amd64:v1.10.1
重新起kubernetet-dashboard
kubectl apply -f kubernetes-dashboard.yaml
- kubernetes kubeadm部署高可用集群
- kubeadm部署kubernetes-1.12.0 HA集群-ipvs
- Kubernetes的几种主流部署方式02-kubeadm部署1.14版本高可用集群
- kubeadm部署kubernetes 1.13.1集群
- kubeadm快速部署kubernetes1.7.6
- 利用kubeadm部署kubernetes 1.7 with flannel
- 直播 | 准生产级的集群部署工具kubeadm原理解析
- 使用 kubeadm 安装部署 kubernetes 1.9
- kubeadm 搭建 kubernetes 集群
- kubeadm部署1.11.1的k8s集群
- kubernetes集群中部署kube-ui
- 离线使用 kubeadm 创建 kubernetes 1.9.2 集群
- kubeadm搭建kubernetes集群
- centos7环境下kubeadm方式部署 kubernetes 1.7
- k8s集群之kubernetes-dashboard和kube-dns组件部署安装
- 10分钟搭建Kubernetes容器集群平台(kubeadm)