5.kubeadm安装

文章目录

  • kubeadm部署
    • 环境初始化
    • 所有的节点安装Docker
    • 所有节点安装kubeadm,kubelet和kubectl
    • 初始化
      • 方法一,配置文件初始化
      • 方法二,命令初始化
    • 网络插件
    • node节点
    • 总结
  • 证书过期
    • 方法一
    • 方法二
    • 总结
  • 部署Dashboard

kubeadm部署

环境初始化

###所有节点,关闭防火墙规则,关闭selinux,关闭swap交换
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/enforcing/disabled/' /etc/selinux/config

iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X

#交换分区必须要关闭
swapoff -a						
sed -ri 's/.*swap.*/#&/' /etc/fstab		
#永久关闭swap分区,&符号在sed命令中代表上次匹配的结果

#加载 ip_vs 模块
for i in $(ls /usr/lib/modules/$(uname -r)/kernel/net/netfilter/ipvs|grep -o "^[^.]*");do echo $i; /sbin/modinfo -F filename $i >/dev/null 2>&1 && /sbin/modprobe $i;done
##修改主机名
hostnamectl set-hostname master01
hostnamectl set-hostname node01
hostnamectl set-hostname node02
##所有节点修改hosts文件
vim /etc/hosts
192.168.242.72 master01
192.168.242.73 node01
192.168.242.74 node02
#调整内核参数

cat > /etc/sysctl.d/k8s.conf << EOF
#开启网桥模式,可将网桥的流量传递给iptables链
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
#关闭ipv6协议
net.ipv6.conf.all.disable_ipv6=1
net.ipv4.ip_forward=1
EOF


cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv6.conf.all.disable_ipv6=1
net.ipv4.ip_forward=1
EOF

sysctl --system

所有的节点安装Docker

###安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2 
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 
yum install -y docker-ce docker-ce-cli containerd.io
 
systemctl start docker.service
systemctl enable docker.service 
##修改配置文件和镜像加速

mkdir -p /etc/docker


tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://ysmprsek.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
      "max-size": "500m", "max-file": "3"
  }
}
EOF

systemctl daemon-reload
systemctl restart docker

所有节点安装kubeadm,kubelet和kubectl

###定义kubernetes源

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

yum install -y kubelet-1.20.15 kubeadm-1.20.15 kubectl-1.20.15

###开机自启kubelet
systemctl enable kubelet.service
#K8S通过kubeadm安装出来以后都是以Pod方式存在,即底层是以容器方式运行,所以kubelet必须设置开机自启
###查看相关软件的版本
yum list kubeadm-1.20*

5.kubeadm安装_第1张图片

初始化

方法一,配置文件初始化

###master01
###查看初始化需要的镜像
kubeadm config images list --kubernetes-version 1.20.15
##生成 k8s 初始化配置文件
mkdir /opt/k8s
kubeadm config print init-defaults > /opt/k8s/kubeadm-config.yaml
### kubeadm-config.yaml  文件解释

---6行---
ttl: 24h0m0s         ##证书有效期,默认24h

---12行---
advertiseAddress: 192.168.242.72          ##master的IP地址

---15行---
criSocket: /var/run/dockershim.sock      ##指定底层docker运行时

---24行---
certificatesDir: /etc/kubernetes/pki    ##自动生成的证书和私钥文件的位置

---32行---
imageRepository: k8s.gcr.io             ##镜像仓库
修改镜像成库为   registry.cn-hangzhou.aliyuncs.com/google_containers

---34行---
kubernetesVersion: v1.20.15				#指定kubernetes版本号

---37行---
serviceSubnet: 10.96.0.0/16			#指定service网段

添加:
podSubnet: "10.244.0.0/16"		#指定pod网段,10.244.0.0/16用于匹配flannel默认网段


#末尾再添加以下内容

--- 
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs								
#把默认的kube-proxy调度方式改为ipvs模式
###在线拉取镜像
kubeadm config images pull --config /opt/k8s/kubeadm-config.yaml

5.kubeadm安装_第2张图片

###初始化 master
kubeadm init --config=/opt/k8s/kubeadm-config.yaml --upload-certs | tee kubeadm-init.log

#--upload-certs 参数可以在后续执行加入节点时自动分发证书文件
#tee kubeadm-init.log 用以输出日志

方法二,命令初始化

kubeadm init \
--apiserver-advertise-address=192.168.242.72 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version=v1.20.15 \
--service-cidr=10.96.0.0/16 \
--pod-network-cidr=10.244.0.0/16 \
--token-ttl=0
初始化集群需使用kubeadm init命令,可以指定具体参数初始化,也可以指定配置文件初始化。
可选参数:

--apiserver-advertise-address:apiserver
通告给其他组件的IP地址,一般应该为Master节点的用于集群内部通信的IP地址,0.0.0.0表示节点上所有可用地址


--apiserver-bind-port:apiserver的监听端口,默认是6443

--cert-dir:通讯的ssl证书文件,默认/etc/kubernetes/pki

--control-plane-endpoint:控制台平面的共享终端,可以是负载均衡的ip地址或者dns域名,高可用集群时需要添加

--image-repository:拉取镜像的镜像仓库,默认是k8s.gcr.io

--kubernetes-version:指定kubernetes版本

--pod-network-cidr:pod资源的网段,需与pod网络插件的值设置一致。Flannel网络插件的默认为10.244.0.0/16,Calico插件的默认值为192.168.0.0/16;

--service-cidr:service资源的网段

--service-dns-domain:service全域名的后缀,默认是cluster.local

--token-ttl:默认token的有效期为24小时,如果不想过期,可以加上 --token-ttl=0 这个参数
方法二初始化后需要修改 kube-proxy 的 configmap,开启 ipvs

kubectl edit cm kube-proxy -n=kube-system

---44行---
修改mode: ipvs

网络插件

###查看 kubeadm-init 日志
cd /opt/k8s
less kubeadm-init.log
##kubernetes的工作目录
cd /etc/kubernetes/
manifests:包含所有的组件的启动参数
pki:包含所有的证书文件和私钥文件
###缺少  kubeconfig  配置文件,无法使用 kubectl
kubectl get nodes


mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

##在初始化结尾由命令指示

5.kubeadm安装_第3张图片

###安装 CNI网络插件
##上传  flannel-v0.21.5.zip  到  /opt/k8s

unzip flannel-v0.21.5.zip
docker load -i flannel.tar
docker load -i flannel-cni-plugin.tar

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RjQPbnaV-1691313345677)(E:\Typora\images\image-20230806160115314.png)]

##移动系统创建的cni目录,并手动创建
cd /opt/
mv cni/ cni_bak
mkdir -p /opt/cni/bin

##解压配置文件
tar xf /opt/k8s/cni-plugins-linux-amd64-v1.3.0.tgz -C /opt/cni/bin/

##安装插件
cd /opt/k8s
kubectl apply -f kube-flannel.yml

5.kubeadm安装_第4张图片

##查看nodes的状态
kubectl get nodes

5.kubeadm安装_第5张图片

###修改  kube-controller-manager.yaml   和   kube-scheduler.yaml  配置文件

cd /etc/kubernetes/manifests

vim kube-controller-manager.yaml
注释掉 26行  ,  - --port=0

vim kube-scheduler.yaml
注释掉  19行    - --port=0


###重启 kubelet
systemctl restart kubelet

##查看组件状态
kubectl get cs

5.kubeadm安装_第6张图片

node节点

###先导入  flannel的两个镜像
scp flannel.tar flannel-cni-plugin.tar 192.168.242.73:/opt/
scp flannel.tar flannel-cni-plugin.tar 192.168.242.74:/opt/

docker load -i flannel.tar
docker load -i flannel-cni-plugin.tar
###根据初始化结果最后的命令来执行
##在每个node节点执行就行

kubeadm join 192.168.242.72:6443 --token abcdef.0123456789abcdef \
    --discovery-token-ca-cert-hash sha256:fb2bccc45966f85442c9fb675cbf04c873c480f9b25da1617d65147911ac0c36

5.kubeadm安装_第7张图片

###查看nodes节点状态
kubectl get nodes

5.kubeadm安装_第8张图片

总结

  • kubeadm init:在使用kubeadm方式安装K8S集群时,可根据初始化配置文件或者配置参数快速的初始化生成一个K8S的master管理平台
  • kubeadm join:根据kubeadm init初始化的提示信息快速的将一个节点作为node节点或者其它的master节点加入到K8S集群当中
    1. 所有节点进行初始化,安装docker引擎和kubeadm kubelet kubectl
    2. 生成集群初始化配置文件并进行修改
    3. 使用kubeadm init根据初始化配置文件生成K8S的master控制管理节点
    4. 安装CNI网络插件(flannel、calico等)
    5. 在其他节点使用kubeadm join将节点以node或者master角色加入K8S集群

证书过期

方法一

###使用 kubeadm 升级集群自动轮换证书

kubeadm upgrade apply --certificate-renewal v1.15.0

方法二

使用 kubeadm 手动生成并替换证书

###先备份并移走证书和配置文件
mkdir /etc/kubernetes.bak
cp -r /etc/kubernetes/pki/ /etc/kubernetes.bak
cp /etc/kubernetes/*.conf /etc/kubernetes.bak
##重新生成新的证书
kubeadm alpha certs renew all --config kubeadm.yaml
###重新生成配置文件

kubeadm alpha kubeconfig user --client-name=admin

kubeadm alpha kubeconfig user --org system:masters --client-name kubernetes-admin  > /etc/kubernetes/admin.conf

kubeadm alpha kubeconfig user --client-name system:kube-controller-manager > /etc/kubernetes/controller-manager.conf

kubeadm alpha kubeconfig user --org system:nodes --client-name system:node:$(hostname) > /etc/kubernetes/kubelet.conf

kubeadm alpha kubeconfig user --client-name system:kube-scheduler > /etc/kubernetes/scheduler.conf
###移走  //etc/kubernetes/manifests  的文件
##过一段时间 在移回来,重新生成  pod

或者

kubectl delete pods -n 指定命名空间      ##挨个重启,比较慢

总结

  • kubeadm 部署的K8S集群更新证书
    1. 备份老证书和kubeconfig配置文件
      mkdir /etc/kubernetes.bak
      cp -r /etc/kubernetes/pki/ /etc/kubernetes.bak
      cp /etc/kubernetes/*.conf /etc/kubernetes.bak
    2. 重新生成证书
      kubeadm alpha certs renew all --config=kubeadm.yaml
    3. 重新生成kubeconfig配置文件
      kubeadm init phase kubeconfig all --config kubeadm.yaml
    4. 重启kubelet和其他K8S组件的Pod容器
      systemctl restart kubelet

mv /etc/kubernetes/manifests /tmp
mv /tmp/*.yaml /etc/kubernetes/manifests

部署Dashboard

##master01节点
###上传  配置文件  recommended.yaml
##安装
kubectl apply -f recommended.yaml

5.kubeadm安装_第9张图片

##查看安装状态
kubectl get pods -A

5.kubeadm安装_第10张图片

##创建service account并绑定默认cluster-admin管理员集群角色
kubectl create serviceaccount dashboard-admin -n kube-system
##查看创建的用户
kubectl get sa -n kube-system

5.kubeadm安装_第11张图片

###给账户授权
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}')

5.kubeadm安装_第12张图片

#使用输出的token登录Dashboard
https://192.168.242.72:30001

你可能感兴趣的:(13.Kubernetes,kubernetes)