Kubeadm 安装 kubernetes
Kubeadm 是一个工具,它提供了 kubeadm init
以及 kubeadm join
这两个命令作为快速创建 kubernetes 集群的最佳实践.
kubernetes, 简称K8s, 是用8代替8个字符"ubernete"而成的缩写. Kubernetes 脱胎于 Google 的 Borg 系统,是一个功能强大的容器编排系统. 是一个全新的基于容器技术的分布式架构领先方案. 目的是实现了资源管理的自动化和跨多个数据中心的资源利用率的最大化. 能够节省至少30% 的开发成本及后期的运维成本. Kubernetes 及其整个生态系统(工具、模块、插件等)均使用 Go 语言编写.
参考: https://cloud.tencent.com/developer/article/1512662
# 查看系统版本
uname -r
# 升级系统内核版本
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
# 查看当前可用版本
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
# 安装最新版内核
yum --enablerepo=elrepo-kernel install kernel-ml -y
# 设置grab2
sudo awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
sudo grub2-set-default 0
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
# 重启
reboot
设置服务名称
# master 节点做下面操作
hostnamectl set-hostname master
# node 节点做下面操作
hostnamectl set-hostname node1 | node2 ...
设置域名映射
# master 节点做下面操作
echo "${ip} master" >> /etc/hosts
# node 节点做下面操作
echo "${ip} node1" >> /etc/hosts
关闭防火墙、selinux 和 swap
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
swapoff -a
sed -i 's/.*swap.*/#&/' /etc/fstab
配置内核参数,将桥接的IPv4流量传递到iptables的链
cp ./config/k8s.conf /etc/sysctl.d/
echo "1" > /proc/sys/net/bridge/bridge-nf-call-iptables
配置国内 yum 源
yum install -y wget
mkdir /etc/yum.repos.d/bak && mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.cloud.tencent.com/repo/centos7_base.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.cloud.tencent.com/repo/epel-7.repo
yum clean all && yum makecache
# 配置 kubernetes 源
cp ./config/kubernetes.repo /etc/yum.repos.d/
# 配置 docker 源
cp ./config/docker-ce.repo /etc/yum.repos.d/
# 卸载已有的docker相关服务
sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
# 安装依赖
sudo yum -y install yum-utils device-mapper-persistent-data lvm2
# 设置阿里云镜像源
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安装docker-ce
sudo yum -y install docker-ce docker-ce-cli containerd.io
# 列出并排序您存储库中可用的版本。此示例按版本号(从高到低)对结果进行排序。
yum list docker-ce --showduplicates | sort -r
# 安装docker
sudo yum install -y docker-ce-19.03.5 docker-ce-cli-19.03.5 containerd.io
# 复制配置
mkdir -p /etc/docker
cp ./config/daemon.json /etc/docker
# 启动
sudo systemctl start docker
# 开机自启动
systemctl enable docker
# 这里指定一下版本号, k8s 差不多每隔 4个月迭代一次版本, 如果想安装最新的, 可执行这条指令: yum install -y kubelet kubeadm kubectl, 同时也要注意一下, dashboard 也要安装对应版本
yum install -y kubelet-1.17.0 kubeadm-1.17.0 kubectl-1.17.0
systemctl enable kubelet
集群初始化
host_ip=`ip addr | grep 'state UP' -A2 | tail -n1 | awk '{print $2}' | awk -F"/" '{print $1}'`
kubeadm init --kubernetes-version=1.17.0 \
--apiserver-advertise-address=${host_ip} \
--image-repository registry.aliyuncs.com/google_containers \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16
# 不配置的话 kubectl 会没权限
mkdir -p /root/.kube
cp /etc/kubernetes/admin.conf /root/.kube/config
部署flannel网络
kubectl apply -f ./config/kube-flannel.yml
部署dashboard (1.17 版本的k8s 对应 dashboard:v2.0.0-beta8; 1.16 版本的k8s 对应 dashboard:v2.0.0-beta6)
kubectl create namespace kubernetes-dashboar
生成证书
host_ip=`ip addr | grep 'state UP' -A2 | tail -n1 | awk '{print $2}' | awk -F"/" '{print $1}'`
mkdir $HOME/certs && cd $HOME/certs
#生成证书
openssl genrsa -out tls.key 2048
openssl req -new -out tls.csr -key tls.key -subj '/CN=${host_ip}'
openssl x509 -req -in tls.csr -signkey tls.key -out tls.crt
kubectl create secret generic kubernetes-dashboard-certs --from-file=tls.key --from-file=tls.crt -n kubernetes-dashboard
cd -
创建用户
kubectl create -f ./config/admin-dashboard1.yaml
# 查看token
admin_token=`kubectl get secrets -n kube-system | grep admin-user | awk '{print $1}'`
kubectl describe secrets ${admin_token} -n kube-system
k8s 默认容器端口号范围是:30000~32767.
sed -i '24i\ \ \ \ \- --service-node-port-range=1-65535' /etc/kubernetes/manifests/kube-apiserver.yaml
# 到master节点, 输入一下指令,查看加入集群的指令
kubeadm token create --print-join-command
# 然后到 node 节点输入该集群指令
kubeadm join 192.168.9.51:6443 --token m2csqd.xn7p6u9sg6s9hrgv --discovery-token-ca-cert-hash sha256:3ce27a68518c46ee8ec2fb860328228092c4c60dc45c4859f74b98fd3439b1e9
kubernetes使用metrics-server提供节点及pod级别的资源监控. Kubernetes从1.8版本开始,CPU、内存等资源的metrics信息可以通过 Metrics API来获取, heapster已经不在维护,转由metrics-server 替代,没安装metrics-server pod命令和自动调度不能正常工作
deploy/1.8+/metrics-server-deployment.yaml
文件# 想要查看每一个 pod 所占用的 cpu 资源和 内存资源, 需要安装监控组件
# 修改两个地方, 一个是镜像地址改为: registry.aliyuncs.com/google_containers/metrics-server-amd64:v0.3.6
# 第二个是添加参数
#- --logtostderr
#- --kubelet-insecure-tls
#- --kubelet-preferred-address-types=InternalIP
# eg:
containers:
- name: metrics-server
image: registry.aliyuncs.com/google_containers/metrics-server-amd64:v0.3.6
imagePullPolicy: IfNotPresent
args:
- --cert-dir=/tmp
- --secure-port=4443
- --logtostderr
- --kubelet-insecure-tls
- --kubelet-preferred-address-types=InternalIP
安装监控组件
# metrics-server文件夹下, 有这五个文件: aggregated-metrics-reader.yaml,auth-delegator.yaml,auth-reader.yaml,metrics-apiservice.yaml,metrics-server-deployment.yaml,metrics-server-service.yaml,resource-reader.yaml
kubectl create -f ./metrics-server
因系统内核版本太低导致安装异常.
– 升级系统内核版本
dashboard 登录后报很多forbbien的错误,
– 有可能是高版本的 k8s 装了 低版本的 dashboard, 解决办法是装和k8s版本相对应的dashboard