K8S集群学习之路(二)

K8S集群学习之路(二)

一、搭建k8s环境平台规划

1、单master集群
在这里插入图片描述
2、多master集群
在这里插入图片描述
3、硬件要求
在这里插入图片描述

4、部署方式
在这里插入图片描述
在这里插入图片描述
注释:第一种方式虽然降低了搭建门槛。但是忽略了了很多细节,第二种一步一步搭建组件,在出现问题的时候可以迅速发现相关问题

二、使用kubeadm部署(常用)
在这里插入图片描述
在这里插入图片描述
相关虚拟机条件

在这里插入图片描述
注释:可以使用swapoff 命令来关闭swwap分区

1、系统初始化相关准备工作

(1)systemctl stop firewalld #关闭防火墙
(2)sed -i ‘s/enforcing/disable/’ /etc/selinux/config #关闭selinux
(3)swapoff -a #关闭swap
(4)hostnamectl set-hostname 主机名 #设置主机名
(5) 在master里面添加hosts //在主机中
在这里插入图片描述
(6)将桥接的IPV4流量传递到iptables的链

cat > /etc/sysctl.d/k8s.conf<<EOF
net.bridge.bridge-nf-call-ip6tables =1
net.bridge.bridge-nf-call-iptables =1
EOF
sysctl --system   //生效

(7) 时间同步

yum install ntpdate -y
ntpdate time.windows.com

2、所有节点安装Docker/kubeadm/kubelet

Kubernetes 默认 CRI(容器运行时)为 Docker,因此先安装 Docker。

(1)安装Docker容器

#安装操作看另外的一篇博客
systemctl enable docker && systemctl start docker  //设置开机启动

(2)添加阿里云YUM软件源

设置仓库地址

cat > /etc/docker/daemon.json << EOF
 {
  "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"] 
 }
 EOF

添加YUM源

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

使用docker info查询是否安装成功

安装 kubeadm,kubelet 和 kubectl

$ yum install -y kubelet kubeadm kubectl 
$ systemctl enable kubelet  //设置开机启动

3、在Master中执行kubeadm

$ kubeadm init 
--apiserver-advertise-address=192.168.31.61     #当前节点的ip
--image-repository registry.aliyuncs.com/google_containers    #镜像
--kubernetes-version v1.17.0    #当前版本
--service-cidr=10.96.0.0/12    #自己连接访问的ip,不能与当前ip冲突
--pod-network-cidr=10.244.0.0/16  #自己连接访问的ip

执行语句

kubeadm init  --apiserver-advertise-address=192.168.159.131  --image-repository registry.aliyuncs.com/google_containers  --kubernetes-version v1.20.5  --service-cidr=10.96.0.0/12   --pod-network-cidr=10.244.0.0/16 

执行中完成出现
在这里插入图片描述
说明你搭建成功,然后在执行过程中寻找
在这里插入图片描述
,可以查询节点
在这里插入图片描述
然后可以在其余的node节点中加入集群
在这里插入图片描述在这里插入图片描述
加入成功
在这里插入图片描述
但是节点的状态都是Notready

4、部署CNI网络插件

安装 Pod 网络插件(CNI)

 kubectl apply –f  https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube- flannel.yml

网络插件可能存在无法访问,需要修改DNS(在/etc/hosts修改),也可本地上传yml文件
然后在运行

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

下载成功
在这里插入图片描述

多运行几次就可以了

kubectl get pods -n kube-system   //查看状态组件

在这里插入图片描述
查询节点已经就绪
在这里插入图片描述
测试 kubernetes 集群

在 Kubernetes 集群中创建一个 pod,验证是否正常运行:

$ kubectl create deployment nginx --image=nginx  #拉取镜像
$ kubectl expose deployment nginx --port=80 --type=NodePort  #暴露端口
$ kubectl get pod,svc  #查询

查询 : http://IP:端口 (端口为worknode也就是Node节点ip)

以上就搭建好了一个集群。

三、二进制方式搭建k8s集群
在这里插入图片描述
1、系统初始化

(1)一台或多台机器,操作系统 CentOS7.x-86_x64
(2)硬件配置:2GB 或更多 RAM,2 个 CPU 或更多 CPU,硬盘 30GB 或更多
(3)集群中所有机器之间网络互通
(4)可以访问外网,需要拉取镜像,如果服务器不能上网,需要提前下载镜像并导入节点
(5)禁止 swap 分区
(命令参考kubeadm搭建)

2、获取证书

(1)下载证书

cfssl 是一个开源的证书管理工具,使用 json 文件生成证书,相比 openssl 更方便使用。 找任意一台服务器操作,这里用 Master 节点。

wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 
wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64
wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64
chmod +x cfssl_linux-amd64 cfssljson_linux-amd64 cfssl-certinfo_linux-amd64 
mv cfssl_linux-amd64 /usr/local/bin/cfssl 
mv cfssljson_linux-amd64 /usr/local/bin/cfssljson 
mv cfssl-certinfo_linux-amd64 /usr/bin/cfssl-certinfo

(2)自签证书

mkdir -p ~/TLS/{etcd,k8s} 
cd TLS/etcd
cat > ca-config.json<< EOF { "signing": { "default": { "expiry": "87600h" },"profiles": { "www": { "expiry": "87600h", "usages": [ "signing",
"key encipherment", "server auth", "client auth" ] } } } }EOF cat > ca-csr.json<< EOF { "CN": "etcd CA", "key": { "algo": "rsa", "size": 2048 },"names": [ { "C": "CN", "L": "Beijing", "ST": "Beijing" } ] }EOF

(3)生成证书

cfssl gencert -initca ca-csr.json | cfssljson -bare ca -
ls *pem
ca-key.pem ca.pem

(4)修改可信任ip

cat > server-csr.json<< EOF { "CN": "etcd", "hosts": [ "192.168.31.71", "192.168.31.72", "192.168.31.73" ],"key": { "algo": "rsa", "size": 2048 },"names": [ { "C": "CN", "L": "BeiJing", "ST": "BeiJing" } ] }EOF

(5)生成证书文件

cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json - profile=www server-csr.json | cfssljson -bare server
ls server*pem
 server-key.pem server.pem

3、部署etcd集群

(1)下载etcd压缩包

下载地址:https://github.com/etcd-io/etcd/releases/download/v3.4.9/etcd-v3.4.9- linux-amd64.tar.gz

(2)创建工作目录并解压二进制包

mkdir /opt/etcd/{bin,cfg,ssl} –p 
tar zxvf etcd-v3.4.9-linux-amd64.tar.gz
mv etcd-v3.4.9-linux-amd64/{etcd,etcdctl} /opt/etcd/bin/

(3)创建 etcd 配置文件

cat > /opt/etcd/cfg/etcd.conf << EOF
 #[Member] ETCD_NAME="etcd-1" 
ETCD_DATA_DIR="/var/lib/etcd/default.etcd" 
ETCD_LISTEN_PEER_URLS="https://192.168.31.71:2380" 
ETCD_LISTEN_CLIENT_URLS="https://192.168.31.71:2379" 
#[Clustering] 
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.31.71:2380" 
ETCD_ADVERTISE_CLIENT_URLS="https://192.168.31.71:2379" 
ETCD_INITIAL_CLUSTER="etcd-1=https://192.168.31.71:2380,etcd- 2=https://192.168.31.72:2380,etcd-3=https://192.168.31.73:2380" ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
EOF
ETCD_NAME:节点名称,集群中唯一 
ETCD_DATA_DIR:数据目录
ETCD_LISTEN_PEER_URLS:集群通信监听地址 
ETCD_LISTEN_CLIENT_URLS:客户端访问监听地址 
ETCD_INITIAL_ADVERTISE_PEER_URLS:集群通告地址 
ETCD_ADVERTISE_CLIENT_URLS:客户端通告地址 
ETCD_INITIAL_CLUSTER:集群节点地址 
ETCD_INITIAL_CLUSTER_TOKEN:集群 Token 
ETCD_INITIAL_CLUSTER_STATE:加入集群的当前状态,new 是新集群,existing 表示加入 已有集群

(4)systemd 管理 etcd

cat > /usr/lib/systemd/system/etcd.service << EOF [Unit] Description=Etcd Server After=network.target After=network-online.target Wants=network-online.target [Service] Type=notify EnvironmentFile=/opt/etcd/cfg/etcd.conf ExecStart=/opt/etcd/bin/etcd \ --cert-file=/opt/etcd/ssl/server.pem \ --key-file=/opt/etcd/ssl/server-key.pem \ --peer-cert-file=/opt/etcd/ssl/server.pem \ --peer-key-file=/opt/etcd/ssl/server-key.pem \ --trusted-ca-file=/opt/etcd/ssl/ca.pem \
--peer-trusted-ca-file=/opt/etcd/ssl/ca.pem \ --logger=zap Restart=on-failure LimitNOFILE=65536 [Install] WantedBy=multi-user.target EOF

(5)拷贝生成的证书

cp ~/TLS/etcd/ca*pem ~/TLS/etcd/server*pem /opt/etcd/ssl/

(6)设置开机启动

systemctl daemon-reload 
systemctl start etcd 
systemctl enable etcd

(7)将配置赋值给其他虚拟机

scp -r /opt/etcd/ root@192.168.31.72:/opt/ scp /usr/lib/systemd/system/etcd.service root@192.168.31.72:/usr/lib/systemd/system/ scp -r /opt/etcd/ root@192.168.31.73:/opt/ scp /usr/lib/systemd/system/etcd.service root@192.168.31.73:/usr/lib/systemd/system/

然后在节点 2 和节点 3 分别修改 etcd.conf 配置文件中的节点名称和当前服务器 IP:

vi /opt/etcd/cfg/etcd.conf #[Member] ETCD_NAME="etcd-1" # 修改此处,节点 2 改为 etcd-2,节点 3 改为 etcd-3
ETCD_DATA_DIR="/var/lib/etcd/default.etcd" ETCD_LISTEN_PEER_URLS="https://192.168.31.71:2380" # 修改此处为当前服务器 IP ETCD_LISTEN_CLIENT_URLS="https://192.168.31.71:2379" # 修改此处为当前服务器 IP #[Clustering] ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.31.71:2380" # 修改此处为当前 服务器 IP ETCD_ADVERTISE_CLIENT_URLS="https://192.168.31.71:2379" # 修改此处为当前服务器 IPETCD_INITIAL_CLUSTER="etcd-1=https://192.168.31.71:2380,etcd- 2=https://192.168.31.72:2380,etcd-3=https://192.168.31.73:2380" ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster" ETCD_INITIAL_CLUSTER_STATE="new"

最后启动 etcd 并设置开机启动,同上。

(8)查看集群状态

ETCDCTL_API=3 /opt/etcd/bin/etcdctl --cacert=/opt/etcd/ssl/ca.pem -- cert=/opt/etcd/ssl/server.pem --key=/opt/etcd/ssl/server-key.pem -- endpoints="https://192.168.31.71:2379,https://192.168.31.72:2379,https://192.16 8.31.73:2379" endpoint health https://192.168.31.71:2379 is healthy: successfully committed proposal: took = 8.154404ms https://192.168.31.73:2379 is healthy: successfully committed proposal: took = 9.044117ms https://192.168.31.72:2379 is healthy: successfully committed proposal: took = 10.000825ms

如果输出上面信息,就说明集群部署成功。如果有问题第一步先看日志: /var/log/message 或 journalctl -u etcd

3、docker处理

(1)安装docker
(2)systemd 管理 docker

cat > /usr/lib/systemd/system/docker.service << EOF [Unit] Description=Docker Application Container Engine Documentation=https://docs.docker.com After=network-online.target firewalld.service Wants=network-online.target [Service] Type=notify ExecStart=/usr/bin/dockerd ExecReload=/bin/kill -s HUP $MAINPID LimitNOFILE=infinity LimitNPROC=infinity LimitCORE=infinity TimeoutStartSec=0 Delegate=yes KillMode=process Restart=on-failure StartLimitBurst=3 StartLimitInterval=60s [Install] WantedBy=multi-user.target EOF

(3)创建配置文件

mkdir /etc/docker cat > /etc/docker/daemon.json << EOF {
"registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"] }EOF

(4)启动并设置开机启动

 systemctl daemon-reload systemctl start docker systemctl enable docker

总结

在这里插入图片描述
看完如果对自己有所帮助,请点赞支持谢谢

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值