k8s 1.22.4 最新版本 kubeadm 部署
标签(空格分隔): kubernetes系列
一: 系统环境初始化
1.1 系统环境
cat /etc/hosts
----
172.16.10.11 flyfishsrvs01
172.16.10.12 flyfishsrvs02
172.16.10.13 flyfishsrvs03
172.16.10.14 flyfishsrvs04
172.16.10.15 flyfishsrvs05
172.16.10.16 flyfishsrvs06
172.16.10.17 flyfishsrvs07
-----
先安装单master版本后续扩容成多master
系统关闭firewalld/selinux /清空iptables防火墙规则
1.2 升级系统内核
所有机器都要升级内核
#查看当前内核版本
uname -r
uname -a
cat /etc/redhat-release
#添加yum源仓库
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
yum install -y https://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm
#更新yum源仓库
yum -y update
#查看可用的系统内核包
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
#安装内核,注意先要查看可用内核,我安装的是5.4版本的内核
yum --enablerepo=elrepo-kernel install kernel-lt
#查看目前可用内核
awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
#使用序号为0的内核,序号0是前面查出来的可用内核编号
grub2-set-default 0
#生成 grub 配置文件并重启
grub2-mkconfig -o /boot/grub2/grub.cfg
reboot
1.2 环境配置
#修改时区,同步时间
yum install chrond -y
vim /etc/chrony.conf
-----
ntpdate ntp1.aliyun.com iburst
-----
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
echo 'Asia/Shanghai' > /etc/timezone
#关闭防火墙,selinux
systemctl stop firewalld
systemctl disable firewalld
sed -i 's/enforcing/disabled/' /etc/selinux/config
setenforce 0
## 关闭swap
swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab
#系统优化
cat > /etc/sysctl.d/k8s_better.conf << EOF
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_instances=8192
fs.inotify.max_user_watches=1048576
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_better.conf
#确保每台机器的uuid不一致,如果是克隆机器,修改网卡配置文件删除uuid那一行
cat /sys/class/dmi/id/product_uuid
二: 安装docker
安装docker#
这里介绍yum源安装
1. 卸载旧版本
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine \
docker-ce
rm -rf /var/lib/docker
2.安装必备软件包
yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
3.设置yum源
#建议使用阿里源
yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#官方源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
4.安装docker
这里介绍两种安装方式,我是用的是第一种
1)使用yum命令安装
#查看可用版本
yum list docker-ce --showduplicates | sort -r
#安装18.09.1的版本,安装其他版本照套格式就行
yum install docker-ce-18.09.1 docker-ce-cli-18.09.1 containerd.io
#安装最新版本
yum install -y docker-ce docker-ce-cli containerd.io
vim /etc/docker/daemon.json
-----
{
"exec-opts": [
"native.cgroupdriver=systemd"
],
"log-driver": "json-file",
"log-level": "warn",
"log-opts": {
"max-size": "1000m",
"max-file": "3"
},
"registry-mirrors": [
"https://b9pmyelo.mirror.aliyuncs.com"
],
"insecure-registries": [],
"selinux-enabled": false
}
------
2)使用shell脚本安装
使用官方提供的shell脚本安装,脚本会自动检测系统信息并进行配置。
#安装最新版本docker
curl -fsSL https://get.docker.com/ | sh
#或者
wget -qO- https://get.docker.com/ | sh
#安装尝鲜版本,但不稳定容易原地爆炸
curl -fsSL https://test.docker.com/ | sh
#下载Docker安装包
https://hub.docker.com/search?offering=community&q=&type=edition
3)启动docker
#加入开机启动项、启动docker
systemctl enable docker
systemctl start docker
#验证
docker run hello-world
docker version
三:安装k8s1.22.4
3.1 增加阿里云源
1.添加阿里云YUM软件源
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=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
wget http://mirrors.aliyun.com/repo/Centos-7.repo -O /etc/yum.repos.d/CentOS-Base.repo
wget http://mirrors.aliyun.com/repo/epel-7.repo -O /etc/yum.repos.d/epel.repo
3.2 安装kubeadm,kubelet和kubectl
安装kubeadm,kubelet和kubectl
目前最新版本是1.22.4,我们直接上最新版
yum install -y kubectl-1.22.4 kubelet-1.22.4 kubeadm-1.22.4
systemctl enable kubelet
3.3 初始化 部署Master节点
部署Master节点#
初始化有如下两种方式
方式一:使用kubeadm init命令初始化
在k8s-Master01上执行,报错请看k8s报错汇总
kubeadm init \
--apiserver-advertise-address=172.16.10.11 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.22.4 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16 \
--ignore-preflight-errors=all
--apiserver-advertise-address 集群通告地址
--image-repository 由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址
--kubernetes-version K8s版本,与上面安装的一致
--service-cidr 集群内部虚拟网络,Pod统一访问入口
--pod-network-cidr Pod网络,,与下面部署的CNI网络组件yaml中保持一致
--ignore-preflight-errors=all 忽略一些检查错误
scp /etc/docker/daemon.json root@172.16.10.12:/etc/docker/
scp /etc/docker/daemon.json root@172.16.10.13:/etc/docker/
node 节点重启docker
service docker restart
flyfishsrvs02,flyfishsrvs03 节点加入
kubeadm join 172.16.10.11:6443 --token alp562.cpgysql4occ4a1nv \
--discovery-token-ca-cert-hash sha256:c5afaeff1d3f0bd31caeb5cc7876691e6efdcc4030030af151990a8f845f2cb4
kubectl get cs
关于报错:
Get "https://127.0.0.1:10257/healthz": dial tcp 127.0.0.1:10257: connect: connection refused
vim /etc/kubernetes/manifests/kube-controller-manager.yaml
vim /etc/kubernetes/manifests/kube-scheduler.yaml
kubectl get cs
3.4 安装容器网络
网络组件有很多种,只需要部署其中一个即可,推荐Calico。
Calico是一个纯三层的数据中心网络方案,Calico支持广泛的平台,包括Kubernetes、OpenStack等。
Calico 在每一个计算节点利用 Linux Kernel 实现了一个高效的虚拟路由器( vRouter) 来负责数据转发,而每个 vRouter 通过 BGP 协议负责把自己上运行的 workload 的路由信息向整个 Calico 网络内传播。
此外,Calico 项目还实现了 Kubernetes 网络策略,提供ACL功能。
1.下载Calico
wget https://docs.projectcalico.org/manifests/calico.yaml --no-check-certificate
vim +3878 calico.yaml
...
- name: CALICO_IPV4POOL_CIDR
value: "10.244.0.0/16"
...
kubectl apply -f calico.yaml
kubectl get pods -n kube-system
kubectl get node
3.5 部署dashboard
1.下载yaml文件
官网下载地址
目前最新版本为v2.4.0
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.4.0/aio/deploy/recommended.yaml
vim recommended.yaml
----
kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kubernetes-dashboard
spec:
ports:
- port: 443
targetPort: 8443
nodePort: 30001
type: NodePort
selector:
k8s-app: kubernetes-dashboard
----
kubectl apply -f recommended.yaml
kubectl get pods -n kubernetes-dashboard
kubectl get pods,svc -n kubernetes-dashboard
# 创建用户
kubectl create serviceaccount dashboard-admin -n kube-system
# 用户授权
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
# 获取用户Token
kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')
http://172.16.10.11:30001
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
这里的警告表示在v1.19+版本,该命令要被弃用了
这里的cs是缩写,全称是componentstatuses,意为组件状态
该命令是查看k8s资源,k8s资源有很多,resources意为资源
kubectl api-resources | more
第一列是资源的名字
第二列是缩写
第三列是API组
第四列是否支持命名空间
查看api代理的URL
kubectl cluster-info
查看集群详细信息
kubectl cluster-info dump |more
信息很多,以json格式输出的,一般很少使用,常用的如下
kubectl describe node flyfishsrvs01
kubectl describe cs
kubectl get pod -n kube-system