官方提供Kubernetes部署3种方式
- minikube
Minikube是一个工具,可以在本地快速运行一个单点的Kubernetes,尝试Kubernetes或日常开发的用户使用。不能用于生产环境。
官方文档: https://kubernetes.io/docs/setup/minikube/
- kubeadm
kubeadm可帮助你快速部署一套kubernetes集群。kubeadm设计目的为新用户开始尝试kubernetes提供一种简单的方法。目前是Beta版。
官方文档: https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/
https://kubernetes.io/docs/setup/independent/install-kubeadm/
- 二进制包
从官方下载发行版的二进制包,手动部署每个组件,组成Kubernetes集群。目前企业生产环境中主要使用该方式。
下载地址: https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.11.md#v1113
1.安装要求
-
操作系统
-
CentOS 7.5
-
内存2GB + ,2核CPU +
-
集群节点之间可以通信
-
每个节点唯一主机名,MAC地址和product_uuid
-
- 检查MAC地址:使用ip link或者ifconfig -a
- 检查product_uuid:cat /sys/class/dmi/id/product_uuid
-
禁止swap分区。这样才能使kubelet正常工作
-
服务器规划:
角色 IP k8s-master 192.168.183.160 k8s-node1 192.168.183.162 k8s-node2 192.168.183.163
2.准备环境(所有节点都要执行;除了配置hosts外)
关闭防火墙:
[root@k8s-master ~]# systemctl stop firewalld && systemctl disable firewalld
关闭selinux:
[root@k8s-master ~]# sed -i 's/enforcing/disabled/' /etc/selinux/config
[root@k8s-master ~]# setenforce 0
关闭swap:
# 临时
[root@k8s-master ~]# swapoff -a
# 永久
[root@k8s-master ~]# vim /etc/fstab
添加主机名与IP对应关系:
#在master添加hosts;其他节点不用执行
[root@k8s-master ~]# cat >> /etc/hosts << EOF
192.168.183.160 k8s-master
192.168.183.162 k8s-node1
192.168.183.163 k8s-node2
EOF
将桥接的IPv4流量传递到iptables的链
[root@k8s-master ~]# cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
# 生效
[root@k8s-master ~]# sysctl --system
同步时间:
[root@k8s-master ~]# yum install ntpdate -y
[root@k8s-master ~]# ntpdate ntp.api.bz
3.安装Docker(所有节点执行)
Docker与Kubernetes关系图:
安装Docker
#换成国内镜像源
[root@k8s-master ~]# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
#安装Docker并启动和设置开机自启
[root@k8s-master ~]# yum install -y docker-ce-18.06.1.ce-3.el7
[root@k8s-master ~]# systemctl enable docker && systemctl start docker
#配置加速器
[root@k8s-master ~]# cat > /etc/docker/daemon.json << EOF
{
"registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]
}
EOF
#重新启动验证是否成功
[root@k8s-master ~]# systemctl restart docker
4.安装kubeadm,kubelet和kubectl(所有节点执行)
- kubeadm: 引导集群的命令
- kubelet:集群中运行任务的代理程序
- kubectl:命令行管理工具
4.1添加阿里云YUM软件源
[root@k8s-master ~]# cat > /etc/yum.repos.d/kubernetes.repo << EOF
[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
4.2安装kubeadm,kubelet和kubectl
[root@k8s-master ~]# yum install -y kubelet-1.17.0 kubeadm-1.17.0 kubectl-1.17.0
[root@k8s-master ~]# systemctl enable kubelet.service
5.使用kubeadm创建单个Master集群
5.1初始化Master
[root@k8s-master ~]# kubeadm init \
--apiserver-advertise-address=192.168.183.160 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.17.0 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16
...
Your Kubernetes master has initialized successfully!
kubeadm join 192.168.183.160:6443 --token 61l0hl.ducgh36sqy6g0wkv \
> --discovery-token-ca-cert-hash sha256:3f03be4b0d08126b008c2e7ba48a2ccb501054fe0bdb8089aa869ec1d11fd99e
#初始化完成后,最后会输出一个join命令,先记住,下面有用。拷贝kubectl使用的连接k8s认证文件到默认路径:
[root@k8s-master ~]# mkdir -p $HOME/.kube
[root@k8s-master ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@k8s-master ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config
5.2安装Pod网络插件
可能会因网速问题失败,可以多试几次;如果实在不行,那就更换镜像地址。
[root@k8s-master ~]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
更换镜像地址:
[root@k8s-master ~]# wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
vim kube-flannel.yml
- name: install-cni
image: quay.io/coreos/flannel:v0.15.1
修改成:
- name: install-cni
image: lizhenliang/flannel:v0.15.1
- name: kube-flannel
image: quay.io/coreos/flannel:v0.15.1
修改成:
- name: kube-flannel
image: lizhenliang/flannel:v0.15.1
5.3加入工作节点
在Node节点切换到root账号执行:
[root@k8s-node1 ~]# kubeadm join 192.168.183.160:6443 --token 61l0hl.ducgh36sqy6g0wkv \
> --discovery-token-ca-cert-hash sha256:3f03be4b0d08126b008c2e7ba48a2ccb501054fe0bdb8089aa869ec1d11fd99e
格式:kubeadm join --token <token> <master-ip>:<master-port> --discovery-token-ca-cert-hash sha256:<hash>
6. kubernetes dashboard
先将yaml文件下载下来,修改里面的Service NodePort类型。
[root@k8s-master ~]# wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta8/aio/deploy/recommended.yaml
修改Service:
[root@k8s-master ~]# vim recommended.yaml
kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kubernetes-dashboard
spec:
type: NodePort
ports:
- port: 443
targetPort: 8443
nodePort: 30001
修改完成后执行kubectl apply -f kubernetes-dashboard.yaml
即可。
创建service account并绑定默认cluster-admin管理员集群角色
# 创建用户
[root@k8s-master ~]# kubectl create serviceaccount dashboard-admin -n kube-system
serviceaccount/dashboard-admin created
# 用户授权
[root@k8s-master ~]# kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
clusterrolebinding.rbac.authorization.k8s.io/dashboard-admin created
# 获取用户Token并将获取到的Token复制浏览器中
[root@k8s-master ~]# kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')