Roy学Kubernetes(5):Kubernetes安装
虽然kubernetes安装方式有多种,推荐使用kubeadm安装,操作非常方便,极大的提高了部署效率,以下为测试验证过程。
软件版本:
组件名 | 版本 | 说明 |
---|---|---|
kubernetes | v1.13.3 | 使用版本为v1.13.2 |
docker | 17.03.2-ce | |
etcd | 3.2.24 | |
calico | v3.1.3 | |
coredns | 1.2.6 | |
dashboard | v1.10.0 | |
haepster | v1.4.2 | |
influxdb | v1.3.3 |
kubernetes最少需一个节点运行,此处以三个主机为例,详细角色信息如下:
主机名 | 角色 | IP | OS | 基础组件(yum安装) | 角色组件(master创建) |
---|---|---|---|---|---|
k8s-node1 | master | 192.168.100.101 | CentOS7.3_x64 | kubeadm,kubelet,kubectl,docker | calico,proxy,etcd,coredns,apiserver,controller-manager,scheduler,dashboard,heapster,influxdb |
k8s-node2 | worker | 192.168.100.102 | CentOS7.3_x64 | kubeadm,kubelet,kubectl,docker | calico,proxy |
k8s-node3 | worker | 192.168.100.103 | CentOS7.3_x64 | kubeadm,kubelet,kubectl,docker | calico,proxy |
一、各节点初始化
1. 关闭防火墙
1 | systemctl stop firewalld.service |
注:若要开启防火墙,在放行kubernetes集群及服务所有端口以外,还需要配置防火墙的FORWARD链接默认ACCEPT
2. 永久关闭SELinux
1 | setenforce 0 # 不重启的情况下 |
3. 同步集群系统时间
1 | yum -y install ntp |
4. 设置内核参数及加载ipvs模块
因安装网络插件,需要系统开启以下参数
vim /etc/sysctl.conf
1 | net.ipv4.ip_forward=1 |
若要启用ipvsadm,必须要加载以下内核模块
1 | modprobe br_netfilter |
vim /etc/security/limits.conf
1 | * soft nofile 65536 |
5. 禁用swap
注释掉/etc/fstab里的swap行,并关闭swap:
1 | swapoff -a |
6. 重启机器
1 | reboot |
二、各节点基础软件安装与配置
因为GFW的存在,部分软件我们配置阿里云的安装源
1. 安装docker
安装见官方文档
安装依赖包
1 | yum install -y epel-release |
我们需要配置docker的默认目录和国内镜像源
1 | vim /etc/docker/daemon.json |
上面文件和目录,没有可以手动创建,配置如下:
1 | { |
其中:192.168.100.100是指本地搭建好的harbor仓库,且kubernetes镜像已经在仓库内准备就绪
重新启动docker服务
1 | systemctl enable docker |
2. 安装kubeadm,kubelet,kubectl
添加阿里云的kubernetes安装源
vim /etc/yum.repos.d/kubernetes.repo
1 | [kubernetes] |
安装
1 | yum -y install kubeadm kubelet kubectl ipvsadm |
三、master节点安装配置
1. 获取被墙的google镜像
kubeadm初始化会从google镜像站点gcr.io拉取需要的镜像,为了获取被GFW墙掉的镜像,可以翻墙拉取到本地,改成相同的镜像名;或将各yaml文件中的gcr.io替换为国内(如阿里云)或本地(如harbor)镜像源地址,或docker使用代理方式获取,方法如下
在/usr/lib/systemd/system/docker.service配置中[Service]添加如下列
- http代理方式
1 | Environment="ALL_PROXY=http://IP:PORT" |
- sockt代理方式
1 | Environment="ALL_PROXY=socks5://IP:PORT" |
重新加载并重启docker
1 | systemctl daemon-reload |
此次实验我们已经创建好harbor本地镜像仓库,k8s镜像仓库地址为192.168.100.100/k8s
2. 初始化master节点
1 | kubeadm init --apiserver-advertise-address=192.168.100.101 --image-repository=192.168.100.100/k8s --pod-network-cidr=10.42.0.0/16 --service-cidr=10.43.0.0/16 --kubernetes-version=v1.13.2 |
参数详解:
- –apiserver-advertise-address apiserver监听地址
- –image-repository 指定默认镜像仓库地址(默认是gcr.io),测试镜像均位于192.168.100.100/k8s树下
- –pod-network-cidr pod网络的网段,请注意不要和k8s默认网段以及主机所有网段有冲突
- –service-cidr service网络的网段
- –kubernetes-version 指定kubernetes版本
请注意命令执行完后最下面的输出内容
1 | Your Kubernetes master has initialized successfully! |
请记住kubeadmm join这一行,这即为node加入的完整命令
若忘记join token,可通过以下命令获取
1 | kubeadm token create --print-join-command |
集群启动后要获取集群的使用权限,上面提示了master节点需要配置环境变量(普通用户),若使用root用户连接和管理,我们需要在root家目录的.bash_profile文件中添加以下环境变量并使其生效:
1 | export KUBECONFIG=/etc/kubernetes/admin.conf |
可选:kubeadm init默认初始化生成单节点的etcd服务,为避免单点故障,可手动创建3节点的etcd集群;kubeadm init连接外部etcd集群的方式是使用–config参数外挂配置文件kubeadm-config.yaml,以下为示例:
1 |
|
3. 安装CNI网络插件
网络插件Calico用于管理k8s集群规划的pod网络,保证分配到每个Node上的容器的IP唯一和连通性,kubernetes可供选择的网络插件有很多,
如Calico,Canal,flannel,Kube-router,Romana,Weave Net,详见官方文档
yaml文件地址:
1 | https://docs.projectcalico.org/v3.3/getting-started/kubernetes/installation/hosted/rbac-kdd.yaml |
需要修改image参数为本地Harbor镜像源
- calico_rbac.yml
- calico.yml
记得修改网络地址为自己定义好的地址
1 | "Network": "10.42.0.0/16", |
1 | cd /tmp |
可以通过以下命令查看状态
1 | kubectl -n kube-system get pods |
三、添加node节点
只需要在node节点上执行上面master节点初始化后的join命令即可加入到k8s集群
1 | kubeadm join 192.168.100.101:6443 --token 5hagg1.8p1xtxtukam988lz --discovery-token-ca-cert-hash sha256:863923187d6a51bba146cfc9cbe2111b9223c11da10ca9e33e243b5f60dabb25 |
注:添加master节点只需在上述命令后追加--experimental-control-plane
参数即可
若添加成功,在master节点可以通过以下命令查看
1 | [root@k8s-node1 tmp]# kubectl get nodes |
至此,集群创建完毕
- 本文链接:http://www.whyvv.top/k8s5.html
- 版权声明:版权所有,转载请注明出处。
分享