Kubernetes(二)集群安装

一    系统环境说明

  • 系统版本:CentOS 7.8
  • 内核版本:3.10.0-1127     后续看是否有必要升级到 4.4.218-1
  • kubernetes 版本:1.19.3
  • docker版本:19.03.11

二    安装前的准备

(1)配置本地解析

node和master都'需要做'

原因

      节点的 hostname 必须使用标准的 DNS 命名,另外千万不用使用默认的 localhost 的 hostname,会导致各种错误出现的。在 Kubernetes 项目里,机器的名字以及一切存储在 Etcd 中的 API 对象,都必须使用标准的 DNS 命名(RFC 1123)

(2)禁用防火墙和SELinux

node和master'都需要做'

禁用防火墙

$ systemctl stop firewalld
$ systemctl disable firewalld

禁用SELINUX

setenforce 0
cat /etc/selinux/config
SELINUX=disabled

'或者'sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

(3)由于开启内核 ipv4 转发需要加载 br_netfilter 模块,所以加载下该模块

modprobe br_netfilter  -->'node和master'

(4)配置内核参数

node和master'都需要'

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system  '或者'   sysctl -p /etc/sysctl.d/k8s.conf

'备注': net.ipv4.ip_forward = 1 --> 不确定的话也可以'添加到'里面

(5)安装ipvs

网络'采用ipvs','不采用iptables' --> 'node和master'

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
EOF
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4

脚本创建了的/etc/sysconfig/modules/ipvs.modules文件,保证在节点重启后能自动加载所需模块。使用lsmod | grep -e ip_vs -e nf_conntrack_ipv4命令查看是否已经正确加载所需的内核模块

安装相应的工具包

接下来还需要确保各个节点上已经安装了 ipset 软件包

$ yum install ipset -y

为了便于查看 ipvs 的代理规则,最好安装一下管理工具 ipvsadm

$ yum install ipvsadm -y

(6)安装容器运行时

'master和node'都需要安装  -->  '注意版本的一致性'

官方指导

参考之前安装docker的博客

(7)时间同步

'master和node'都安装

yum install chrony -y

systemctl enable chronyd

systemctl start chronyd

'检测'

chronyc sources  '或者'  chronyc sources -v

----------------  'master配置(server)'  ----------------

vim /etc/chrony.conf

server ntp1.aliyun.com iburst

'其它sever删除,只留下阿里云'

allow 172.25.2.0/24

'允许其此网段的来同步自己的时间'

----------------  'node配置(client)'  ----------------

vim /etc/chrony.conf

'删除所有的server,将master作为server'

server 172.25.2.200 iburst

(8)配置kubernetes国内源

  master节点

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
        http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
国外是'Google源' --> '被禁止'

安装指定版本的kubernetes组件

yum install -y kubelet-1.19.3 kubeadm-1.19.3 kubectl-1.19.3 --disableexcludes=kubernetes

-disableexcludes '禁掉除了'kubernetes之外的别的仓库

备注:'kubeadm master也需要安装kubelet' --> '有几个static pod'

设置kubelet开机立即启动

systemctl enable --now kubelet

 node节点

'安装docker'

'配置国内源' --> '只安装kubelet'

yum install -y kubelet-1.19.3 

'开机启动'

systemctl enable --now kubelet

(9)初始化集群

(1) '导出默认的初始化配置:' --> '便于修改'  --> '只在master上做'

kubeadm config print init-defaults > kubeadm.yaml

然后根据我们自己的'需求修改'配置

1)imageRepository 的值 --> '如果没有配置代理,国内无法拉取'

2)kube-proxy 的模式为 ipvs --> '节点不支持ipvs会自动降级成iptables'
 
3)我们这里是准备安装 'flannel 网络插件'的,需要将 networking.podSubnet 设置为10.244.0.0/16

说明:'扁平的二层网络'

最终配置文件

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: 172.25.2.200  # master的内网地址 --> kube-apiserver的IP
  bindPort: 6443
nodeRegistration:
  criSocket: /var/run/dockershim.sock  # 内置了docker的shim
  name: master
  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: registry.aliyuncs.com/google_containers # 国内镜像无法拉取,这个属于个人维护,不属于'阿里云官方'维护
kind: ClusterConfiguration
kubernetesVersion: v1.19.3  # 修改为'实际的版本'
networking:
  dnsDomain: cluster.local
  podSubnet: 10.244.0.0/16  # 如果选择flannel插件,需要给一个扁平的二层网络,注意不要与节点内网冲突
  serviceSubnet: 10.96.0.0/12
scheduler: {}
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs # 采用ipvs
'列出所需要的镜像' --> '必须指定配置文件,否则拉取的还是原来的'

kubeadm config images list --config kubeadm.yaml

也可以'提前先将相关镜像' pull 下来 --> '这步不操作,初始化的话也会pull'

kubeadm config images pull --config kubeadm.yaml

'指定yaml进行集群初始化'

kubeadm init --config kubeadm.yaml

'下面是流程图'

说明: 直接在root执行也可以,这里选择普通用户'kiosk'

node安装

(10)安装网络

flannel网络

官方参考

download下来不管node还是master --> 只要能'与apiserver通信即可'

修改

- --iface=eth0  如果是'多网卡'的话,指定内网网卡的名称

kubectl apply -f kube-flannel.yml

(10)安装Dashboard

'下载'

wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.4/aio/deploy/recommended.yaml

'修改'  --> NodePort类型的 'Service'

'生效'

kubectl apply -f recommended.yaml

创建一个具有'全局所有权限'的用户来登录 Dashboard --> 'admin.yaml'
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: admin
roleRef:
  kind: ClusterRole
  name: cluster-admin
  apiGroup: rbac.authorization.k8s.io
subjects:
- kind: ServiceAccount
  name: admin
  namespace: kubernetes-dashboard
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin
  namespace: kubernetes-dashboard

获取登陆Token

kubectl get secret admin-token-nwq6f -o jsonpath={.data.token} -n kubernetes-dashboard |base64 -d

用上面的 'base64 解码后'的'字符串'作为 token 登录 Dashboard
谷歌浏览器访问出现问题,'证书无法认证'  -->Firefox可以访问

chrome可以访问dashoard

其它参考

(11)最终的效果

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值