k8s安装流程
ctr和crictl命令具体区别如下,也可以--help查看。crictl缺少对具体镜像的管理能力,可能是k8s层面镜像管理可以由用户自行控制,能配置pod里面容器的统一镜像仓库,镜像的管理可以有habor等插件进行处理。ctr是containerd自带的CLI命令行工具,crictl是k8s中CRI(容器运行时接口)的客户端,k8s使用该客户端和containerd进行交互;(1)部署k8s的过
·
一、准备工作
1、修改初始环境,修改机器IP
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static #static表示静态ip地址
ONBOOT=yes #开机自启动网络,必须是yes
IPADDR=192.168.40.180 #ip地址,需要跟自己电脑所在网段一致
NETMASK=255.255.255.0 #子网掩码,需要跟自己电脑所在网段一致
GATEWAY=192.168.1.2 #网关,在自己电脑打开cmd,输入ipconfig /all可看到
DNS1=192.168.1.2 #DNS,在自己电脑打开cmd,输入ipconfig /all可看到
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
DEVICE=ens33
ONBOOT=yes
2、关闭防火墙和selinux
[root@master ~]# systemctl stop firewalld ; systemctl disable firewalld
[root@master ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
3、配置主机名,多台主机名都进行修改
[root@master ~]# hostnamectl set-hostname 主机名 && bash
4、关闭交换分区swap
[root@master ~]# vim /etc/fstab #将下行注释掉
#/dev/mapper/centos-swap swap swap defaults 0 0
5、修改机器内核参数,所有都修改
[root@master ~]# modprobe br_netfilter
[root@master ~]# cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
[root@master ~]# sysctl -p /etc/sysctl.d/k8s.conf
6、配置国内repo源
[root@master ~]# yum install yum-utils -y
[root@master ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@master ~]# 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
EOF
7、配置时间同步
[root@master ~]# yum install ntpdate -y #安装ntpdate命令
[root@master ~]# ntpdate cn.pool.ntp.org #跟网络时间做同步
[root@master ~]# crontab -e #把时间同步做成计划任务
* * * * * /usr/sbin/ntpdate cn.pool.ntp.org
[root@master ~]# service crond restart #重启crond服务
8、安装基础包
[root@master ~]# yum install -y device-mapper-persistent-data lvm2 wget net-tools nfs-utils lrzsz gcc gcc-c++ make cmake libxml2-devel openssl-devel curl curl-devel unzip sudo ntp libaio-devel wget vim ncurses-devel autoconf automake zlib-devel python-devel epel-release openssh-server socat ipvsadm conntrack telnet ipvsadm
9、安装containerd
[root@master ~]# yum install containerd.io-1.6.6 -y
[root@master ~]# mkdir -p /etc/containerd
#生成配置文件
[root@master ~]# containerd config default > /etc/containerd/config.toml
#修改配置文件
打开/etc/containerd/config.toml
把SystemdCgroup = false修改成SystemdCgroup = true
把sandbox_image = "k8s.gcr.io/pause:3.6"修改成sandbox_image="registry.aliyuncs.com/google_containers/pause:3.7"
#设置开机自启动
[root@master ~]# systemctl enable containerd --now
10、修改/etc/crictl.yaml文件
[root@master1 ~]#cat > /etc/crictl.yaml <<EOF
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 10
debug: false
EOF
[root@master1 ~]#systemctl restart containerd
11、配置镜像加速器
配置containerd镜像加速器,k8s所有节点均按照以下配置:
编辑vim /etc/containerd/config.toml文件
找到config_path = "",修改成如下目录:
config_path = "/etc/containerd/certs.d"
[root@master ~]# mkdir /etc/containerd/certs.d/docker.io/ -p
[root@master ~]# vim /etc/containerd/certs.d/docker.io/hosts.toml
#写入如下内容:
[host."https://vh3bm52y.mirror.aliyuncs.com",host."https://registry.docker-cn.com"]
capabilities = ["pull"]
#重启containerd:
[root@master ~]# systemctl restart containerd
12、安装docker,docker与containerd不冲突,docker的目的只为了构建dockerfile镜像
[root@master1 ~]# yum install docker-ce -y
[root@master1 ~]# systemctl enable docker --now
13、配置docker加速器
[root@master1 ~]# vim /etc/docker/daemon.json
#写入如下内容:
{
"registry-mirrors":["https://vh3bm52y.mirror.aliyuncs.com","https://registry.docker-cn.com","https://docker.mirrors.ustc.edu.cn","https://dockerhub.azk8s.cn","http://hub-mirror.c.163.com"]
}
#重启docker
systemctl restart docker
14、安装k8s初始化需要的软件包
1.3、安装初始化k8s需要的软件包
[root@master1 ~]# yum install -y kubelet-1.26.0 kubeadm-1.26.0 kubectl-1.26.0
[root@master1 ~]# systemctl enable kubelet
15、kubeadm初始化k8s集群
#设置容器运行时
[root@master1~]# crictl config runtime-endpoint unix:///run/containerd/containerd.sock
#使用kubeadm初始化k8s集群
[root@master1 ~]# kubeadm config print init-defaults > kubeadm.yam
#修改kubeadm.yaml配置文件
localAPIEndpoint:
advertiseAddress: 192.168.40.180 #控制节点的ip
networking:
dnsDomain: cluster.local
podSubnet: 10.244.0.0/16 #指定pod网段, 需要新增加这个
#在文件最后,插入以下内容,(复制时,要带着---):
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs
---
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
cgroupDriver: systemd
#基于kubeadm.yaml初始化k8s集群
[root@master1 ~]# ctr -n=k8s.io images import k8s_1.26.0.tar.gz
#ctr是containerd自带的工具,有命名空间的概念,若是k8s相关的镜像,都默认在k8s.io这个命名空间,所以导入镜像时需要指定命令空间为k8s.io
#使用ctr命令指定命名空间导入镜像
ctr -n=k8s.io images import k8s_1.26.0.tar.gz
#查看镜像,可以看到可以查询到了
crictl images
#根据配置文件初始化
[root@master1 ~]# kubeadm init --config=kubeadm.yaml --ignore-preflight-errors=SystemVerification
#配置kubectl的配置文件config,相当于对kubectl进行授权,这样kubectl命令可以使用这个证书对k8s集群进行管理
[root@master1 ~]# mkdir -p $HOME/.kube
[root@master1 ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@master1 ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config
[root@master1 ~]# kubectl get nodes
二、1、添加k8s工作节点
[root@master1 ~]# kubeadm token create --print-join-command #在master上执行
显示如下:
kubeadm join 192.168.6.110:6443 --token vulvta.9ns7da3saibv4pg1 --discovery-token-ca-cert-hash sha256:72a0896e27521244850b8f1c3b600087292c2d10f2565adb56381f1f4ba7057a
#在node节点执行master返回值,需要添加一个参数
kubeadm join 192.168.6.110:6443 --token vulvta.9ns7da3saibv4pg1 --discovery-token-ca-cert-hash sha256:72a0896e27521244850b8f1c3b600087292c2d10f2565adb56381f1f4ba7057a --ignore-preflight-errors=SystemVerification
#返回this node has joined the cluster即成功加入集群
2、为节点打标签
[root@master1 ~]# kubectl label nodes node1 node-role.kubernetes.io/work=work
3、安装kubernets网络组件--CALICO
#安装calico镜像
[root@master1 ~]# ctr -n=k8s.io images import calico.tar.gz
#在线下载配置文件
wget -v https://docs.projectcalico.org/manifests/calico.yaml
#使用配置文件安装calico网络插件
[root@master1 ~]# kubectl apply -f calico.yaml
4、测试k8s创建pod是否可以正常访问网络
#上传busybox-1-28.tar.gz上传到node1节点
[root@node1 ~]# ctr -n k8s.io images import busybox-1-28.tar.gz
[root@master1 ~]# kubectl run busybox --image docker.io/library/busybox:1.28 --image-pull-policy=IfNotPresent --restart=Never --rm -it busybox -- sh
/# ping www.baidu.com #能访问网络说明插件正常
5、ctr和crictl区别
(1)部署k8s的过程中,经常要对镜像进行操作(拉取、删除、查看等),使用过程中会发现ctr和crictl有很多相同功能
-
ctr是containerd自带的CLI命令行工具,crictl是k8s中CRI(容器运行时接口)的客户端,k8s使用该客户端和containerd进行交互;
-
ctr和crictl命令具体区别如下,也可以--help查看。crictl缺少对具体镜像的管理能力,可能是k8s层面镜像管理可以由用户自行控制,能配置pod里面容器的统一镜像仓库,镜像的管理可以有habor等插件进行处理。
三、添加新节点
1、添加控制节点master2
-
将master1的证书拷贝到master2上
#masster2创建证书目录 [root@master2 ~]# cd /root && mkdir -p /etc/kubernetes/pki/etcd &&mkdir -p ~/.kube/ #把master1节点的证书拷贝到master2上: [root@master1 ~]# scp /etc/kubernetes/pki/ca.crt master2:/etc/kubernetes/pki/ [root@master1 ~]# scp /etc/kubernetes/pki/ca.key master2:/etc/kubernetes/pki/ [root@master1 ~]# scp /etc/kubernetes/pki/sa.key master2:/etc/kubernetes/pki/ [root@master1 ~]# scp /etc/kubernetes/pki/sa.pub master2:/etc/kubernetes/pki/ [root@master1 ~]# scp /etc/kubernetes/pki/front-proxy-ca.crt master2:/etc/kubernetes/pki/ [root@master1 ~]# scp /etc/kubernetes/pki/front-proxy-ca.key master2:/etc/kubernetes/pki/ [root@master1 ~]# scp /etc/kubernetes/pki/etcd/ca.crt master2:/etc/kubernetes/pki/etcd/ [root@master1 ~]# scp /etc/kubernetes/pki/etcd/ca.key master2:/etc/kubernetes/pki/etcd/
-
创建目录并有给权限
[root@xianchaomaster2 ~]# mkdir -p $HOME/.kube [root@xianchaomaster2 ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config [root@xianchaomaster2 ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config
-
安装calico镜像,calico.tar.gz传到master1和node节点
[root@master2 ~]# ctr -n=k8s.io images import k8s_1.26.0.tar.gz [root@master2 ~]# ctr -n=k8s.io images import calico.tar.gz
-
检查 kubeadm-config ConfigMap 是否正确配置了 controlPlaneEndpoint。可以使用 kubectl 命令获取 kubeadm-config ConfigMap 的信息
[root@master1 ~]#kubectl -n kube-system edit cm kubeadm-config -o yaml 添加如下字段: controlPlaneEndpoint: "master_IP:6443" 重启kubelet: [root@master1 ~]# systemctl restart kubelet
-
在master1上查看加入节点命令
[root@master1 ~]# kubeadm token create --print-join-command 显示如下: kubeadm join 192.168.40.180:6443 --token zwzcks.u4jd8lj56wpckcwv \ --discovery-token-ca-cert-hash sha256:1ba1b274090f1f429b18a064cb728
-
在master2上执行加入命令,最后添加控制节点字段
[root@master2 ~]#kubeadm join 192.168.40.180:6443 --token zwzcks.u4jd8lj56wpckcwv --discovery-token-ca-cert-hash sha256:1ba1b274090feecfef58ed28 \ --control-plane --ignore-preflight-errors=SystemVerification
-
查看查询Pod是否正常
[root@master2 ~]# kubectl get pods -n kube-system
-
kubeadm初始化k8s证书过期解决方案
查看证书有效时间: openssl x509 -in /etc/kubernetes/pki/ca.crt -noout -text |grep Not openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text |grep Not 延长证书过期时间 1.把update-kubeadm-cert.sh文件上传到xianchaomaster1节点 2.在xianchaomaster1上执行如下: 1)给update-kubeadm-cert.sh证书授权可执行权限 [root@master1~]#chmod +x update-kubeadm-cert.sh 2)执行下面命令,修改证书过期时间,把时间延长到10年 [root@master1~]# ./update-kubeadm-cert.sh all 3)在master1节点查询Pod是否正常,能查询出数据说明证书签发完成 [root@master1~]# kubectl get pods -n kube-system 4)再次查看证书有效期,可以看到会延长到10年 [root@master1~]# openssl x509 -in /etc/kubernetes/pki/ca.crt -noout -text |grep Not [root@master1~]# openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text |grep Not
更多推荐
已为社区贡献1条内容
所有评论(0)