安装K8S(v1.18.1)版本
说明:现在Kubernetes最新版本在v1.23.5,但是为啥我写个v1.18.1呢?其实版本不同也就镜像不同,因此我们以V1.18.1为例,前期的一些配置是通用的,到后面也就pull镜像是不一样。安装K8S实验环境:CentOS7.5,K8S—1.18.1,Docker—主机IP配置Master192.168.9.104VCPUS ,4GNode1192.168.9.1302VCPUS,2GN
说明:
现在Kubernetes最新版本在v1.23.5,但是为啥我写个v1.18.1呢?其实版本不同也就镜像不同,因此我们以V1.18.1为例,前期的一些配置是通用的,到后面也就pull镜像是不一样。
安装K8S
-
实验环境:CentOS7.5,K8S—1.18.1,Docker—
主机 IP 配置 Master 192.168.9.10 4VCPUS ,4G Node1 192.168.9.130 2VCPUS,2G Node2 192.168.9.131 2VCPUS,2G
修改主机名,并解析(all-node)
[root@localhost ~]# hostnamectl set-hostname master
[root@localhost ~]# bash
[root@master ~]# hostname
master
关闭防火墙,Iptables,Selinux(all-node)
#防火墙
[root@master ~]# systemctl stop firewalld
[root@master ~]# systemctl disable firewalld
#Iptables
[root@master ~]# iptables -F
[root@master ~]# iptables -X
[root@master ~]# iptables -Z
[root@master ~]# /usr/sbin/iptables-save
#Selinux
[root@master ~]# setenforce 0
[root@master ~]# vi /etc/selinux/config
SELINUX=disabled #修改
#或:
sed -i s/SELINUX=enforcing/SELINUX=disabled/g /etc/selinux/config
配置时钟服务(master)
以master为上游服务器,node以master的时间校准
[root@master ~]# yum install -y chrony
[root@master ~]# vi /etc/chrony.conf
server master iburst #注释前面的4行server...,并且添加这一行
allow 192.168.9.0/24 #去掉注释,并修改
local stratum 10 #去掉注释
[root@master ~]# systemctl restart chronyd
[root@master ~]# systemctl enable chronyd
#测试
[root@master ~]# chronyc sources
210 Number of sources = 1
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^* master 10 6 77 155 -2230ns[-6309ns] +/- 13us
配置时钟服务(node)
[root@node1 ~]# yum install -y chrony
[root@node1 ~]# vi /etc/chrony.conf
server master iburst #注释前面的4行server...,并且添加这一行
[root@node1 ~]# systemctl restart chronyd
[root@node1 ~]# systemctl enable chronyd
#测试
[root@node1 ~]# chronyc sources
210 Number of sources = 1
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^* master 11 6 17 58 +120us[+2105us] +/- 4143us
关闭交换分区(all-node)
[root@master ~]# swapoff -a
[root@master ~]# free -h
total used free shared buff/cache available
Mem: 3.7G 150M 3.1G 19M 448M 3.3G
Swap: 0B 0B 0B #swap变为0即可
#在修改fstab文件,使其永久关闭
[root@master ~]# vi /etc/fstab
#/dev/mapper/centos-swap swap swap defaults 0 0 #注释这一行
安装Docker(all-node)
#在阿里云镜像中找到Docker,安装yum源并下载Docker
[root@master ~]# yum install -y docker-ce
#添加加速器:找到阿里云的镜像服务,
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://pve03e8m.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"]
}
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo systemctl enable docker
Docker拉取镜像代理配置(可选)
[root@master ~]# vi /usr/lib/systemd/system/docker.service
在[Service]中添加这三行内容
- EXecStartPost=/usr/sbin/iptables -P FORWARD ACCEPT ###改变iptables规则
- Environment=“HTTPS_PROXY=http://www.ik8s.io:10070” ###我们知道Master和Node节点有的组件需要以pod的方式其启动,而启动pod就需要镜像,这行的目的就是添加一个网址去在这个网址中pull镜像
- Environment=“NO_PROXY=127.0.0.1/8,192.168.9.0/24” ###规定除了pull镜像去使用http://www.ik8s.io:10070这个地址,其他的网路都是有本机回环ip或本机内网ip
修改由Docker引起的Iptables规则
注:可以向上面那样直接写在配置文件中
也可以直接命令行:
[root@master ~]# iptables -P FORWARD ACCEPT
重启服务:
systemctl daemon-reload
systemctl restart docker
设置路由转发(内核参数)(all-node)
可以先来查查:
[root@master ~]# sysctl -a |grep bridge
net.bridge.bridge-nf-call-arptables = 1
net.bridge.bridge-nf-call-ip6tables = 1 #可以看到默认是开着的
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-filter-pppoe-tagged = 0
net.bridge.bridge-nf-filter-vlan-tagged = 0
net.bridge.bridge-nf-pass-vlan-input-dev = 0
sysctl: reading key "net.ipv6.conf.all.stable_secret"
sysctl: reading key "net.ipv6.conf.default.stable_secret"
sysctl: reading key "net.ipv6.conf.docker0.stable_secret"
sysctl: reading key "net.ipv6.conf.ens33.stable_secret"
sysctl: reading key "net.ipv6.conf.ens34.stable_secret"
sysctl: reading key "net.ipv6.conf.lo.stable_secret"
在写一遍:
[root@master ~]# vi /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
[root@master ~]# sysctl -p /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
安装Kubelet,kubeadm,kubectl(all-node)
#找到阿里云镜像,点击kubernetes,配置kubernetes的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
#开始安装:
[root@master yum.repos.d]# yum install -y kubelet-1.18.1 kubeadm-1.18.1 kubectl-1.18.1 --nogpgcheck
sudo systemctl enable --now kubelet
####################第二种方法###############################
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
exclude=kubelet kubeadm kubectl
EOF
sudo yum install -y kubelet-1.20.9 kubeadm-1.20.9 kubectl-1.20.9 --disableexcludes=kubernetes
sudo systemctl enable --now kubelet
来看看各个工具包中的文件(可选)
[root@master ~]# rpm -ql kubelet
/etc/kubernetes/manifests
/etc/sysconfig/kubelet
/usr/bin/kubelet
/usr/lib/systemd/system/kubelet.service
[root@master ~]# rpm -ql kubeadm
/usr/bin/kubeadm
/usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf
[root@master ~]# vi /etc/sysconfig/kubelet #在此文件下定义的参数会在/usr/lib/systemd/system/kubelet.service文件中生效,如果上面的swap不关闭,但是也想要不报错,可以在这里定义参数:
KUBELET_EXTRA_ARGS="--fail-swap-on=false"
kubeadm命令就是用来部署kubernetes集群的
查看kubeadm的命令:
• Completion---shell命令的补全功能
• config,查看一些配置信息,很复杂
• Init,启动一个kubernetes主节点,初始化kubernetes集群
• join,启动一个kubernetes工作节点并加入到集群中
• reset,还原之前使用kubeadm init或kubeadm join对节点做的操作
• token,使用kubeadm join来管理令牌,token的保质期为24小时
• upgrade,用来更新kubernetes集群到新版本
• version,查看kubernetes的版本信息
来看看初始化一个集群式的配置信息:
kubeadm config print init-defaults
其实,kubernetes是不管pod间怎样通信的,也就说pod间通信不是kubernetes取定义的,它就不管这事,那pod间通信是如何实现的呢?
其实kubernetes提供一个CNI,叫:容器网络接口,CNI是第三方插件。
那这就相当于pod间的网络是第三方插件提供的。
能够为pod网络提供的方案很多,有两个:
1.flanner他的网络段是:10.244.0.0/16,当然这个网段可以自定义,如果自定义需要在两处定义:1.在部署kubernetes时指定网段,部署flanner时指定网段
2.calico,它默认的网段:192.168.0.0/16
初始化kubernetes集群
在初始化kubernetes集群有两种方式:
第一种方法:
-
另一个是直接写一个上图的init初始化文件,再用kubeadm init config指定这个文件
重要的部分—获取镜像
如果不做任何措施,初始化kubernetes集群所需要的镜像是在国外的,在拉取时会失败,我们可以pull阿里云的镜像,然后再tag。
初始化命令:
kubeadm init --kubernetes-version=1.18.1 --pod-network-cidr=10.244.0.0/16
可以添加参数:
kubeadm init --kubernetes-version=1.18.1 --apiserver-advertise-address=$IP --image-repository $IP/library --pod-network-cidr=10.244.0.0/16
#kubeadm 使用 eth0 的默认网络接口(通常是内网IP)做为 Master 节点的 advertise address ,如果我们想使用不同的网络接口,可以使用 --apiserver-advertise-address=<ip-address> 参数来设置
#--image-repository 指定后端镜像仓库
如何知道初始化kubernetes集群所需要那些镜像呢?我们可以先初始化,然后等报错就会显示出来了
在master节点需要下面7个的基础镜像:
k8s.gcr.io/kube-apiserver:v1.18.1
k8s.gcr.io/kube-controller-manager:v1.18.1
k8s.gcr.io/kube-scheduler:v1.18.1
k8s.gcr.io/kube-proxy:v1.18.1
k8s.gcr.io/pause:3.2
k8s.gcr.io/etcd:3.4.3-0
k8s.gcr.io/coredns:1.6.7
然后进入阿里云,拉取相关镜像:
[root@master ~]# docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.18.1
[root@master ~]# docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.18.1
[root@master ~]# docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.18.1
[root@master ~]# docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.18.1
[root@master ~]# docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2
[root@master ~]# docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.3-0
[root@master ~]# docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.6.7
然后在tag镜像
[root@master ~]# docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.18.1 k8s.gcr.io/kube-apiserver:v1.18.1
[root@master ~]# docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.18.1 k8s.gcr.io/kube-controller-manager:v1.18.1
[root@master ~]# docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.18.1 k8s.gcr.io/kube-scheduler:v1.18.1
[root@master ~]# docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.18.1 k8s.gcr.io/kube-proxy:v1.18.1
[root@master ~]# docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2 k8s.gcr.io/pause:3.2
[root@master ~]# docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.3-0 k8s.gcr.io/etcd:3.4.3-0
[root@master ~]# docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.6.7 k8s.gcr.io/coredns:1.6.7
查看镜像
[root@master ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
k8s.gcr.io/kube-proxy v1.18.1 4e68534e24f6 21 months ago 117MB
registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy v1.18.1 4e68534e24f6 21 months ago 117MB
k8s.gcr.io/kube-apiserver v1.18.1 a595af0107f9 21 months ago 173MB
registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver v1.18.1 a595af0107f9 21 months ago 173MB
k8s.gcr.io/kube-controller-manager v1.18.1 d1ccdd18e6ed 21 months ago 162MB
registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager v1.18.1 d1ccdd18e6ed 21 months ago 162MB
k8s.gcr.io/kube-scheduler v1.18.1 6c9320041a7b 21 months ago 95.3MB
registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler v1.18.1 6c9320041a7b 21 months ago 95.3MB
k8s.gcr.io/pause 3.2 80d28bedfe5d 22 months ago 683kB
registry.cn-hangzhou.aliyuncs.com/google_containers/pause 3.2 80d28bedfe5d 22 months ago 683kB
k8s.gcr.io/coredns 1.6.7 67da37a9a360 23 months ago 43.8MB
registry.cn-hangzhou.aliyuncs.com/google_containers/coredns 1.6.7 67da37a9a360 23 months ago 43.8MB
registry.cn-hangzhou.aliyuncs.com/google_containers/etcd 3.4.3-0 303ce5db0e90 2 years ago 288MB
k8s.gcr.io/etcd 3.4.3-0 303ce5db0e90 2 years ago 288MB
在此初始化kubernetes集群
[root@master ~]# kubeadm init --kubernetes-version=1.18.1 --pod-network-cidr=10.244.0.0/16
然后根据提示的结果进行操作
[root@master ~]# mkdir -p $HOME/.kube
[root@master ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
查看集群状态:
[root@master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master NotReady master 2m55s v1.18.1
发现时NotReady的状态,说明还缺个插件—网络插件
先pull镜像
[root@master ~]# docker pull quay.io/coreos/flannel:v0.14.0
apply文件,文件内容在此文件夹下
[root@master ~]# kubectl apply -f aa.yaml
podsecuritypolicy.policy/psp.flannel.unprivileged created
clusterrole.rbac.authorization.k8s.io/flannel created
clusterrolebinding.rbac.authorization.k8s.io/flannel created
serviceaccount/flannel created
configmap/kube-flannel-cfg created
daemonset.apps/kube-flannel-ds created
查看pod中的容器运行情况
[root@master ~]# kubectl get pod -n kube-system
NAME READY STATUS RESTARTS AGE
coredns-66bff467f8-mc7m2 1/1 Running 0 18m
coredns-66bff467f8-p84qc 1/1 Running 0 18m
etcd-master 1/1 Running 0 18m
kube-apiserver-master 1/1 Running 0 18m
kube-controller-manager-master 1/1 Running 0 18m
kube-flannel-ds-6wxtz 1/1 Running 0 119s
kube-proxy-hdlwl 1/1 Running 0 18m
kube-scheduler-master 1/1 Running 0 18m
这时再来查看kubernetes集群的状态
[root@master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready master 19m v1.18.1
添加节点
前提条件:在node节点需要以下镜像:
quay.io/coreos/flannel:v0.14.0
k8s.gcr.io/kube-proxy:v1.18.1
k8s.gcr.io/pause:3.2
打包镜像,并scp传入到node节点:
[root@master ~]# docker save --output flannel.tar quay.io/coreos/flannel:v0.14.0
[root@master ~]# docker save --output proxy.tar k8s.gcr.io/kube-proxy:v1.18.1
[root@master ~]# docker save --output pause.tar k8s.gcr.io/pause:3.2
[root@master ~]# scp flannel.tar proxy.tar pause.tar root@node1:/root/
解压镜像
[root@node1 ~]# docker load -i flannel.tar
[root@node1 ~]# docker load -i proxy.tar
[root@node1 ~]# docker load -i pause.tar
如果前面假如集群节点的token和 ca证书sha256编码hash的值已经看不到了,可以这样找回
-
查看Token
[root@master ~]# kubeadm token list TOKEN TTL EXPIRES USAGES DESCRIPTION EXTRA GROUPS 2wrsgm.omdwtzrk7cdrisrm 23h 2022-01-02T22:57:29+08:00 authentication,signing The default bootstrap token generated by 'kubeadm init'. system:bootstrappers:kubeadm:default-node-token
-
获取ca证书sha256编码hash值
[root@master ~]# openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //' 669cc1f43025e3b29bee44f882804bc0315e3d9a73d87ab407fcd62637bd9e2c
直接生成新Token
kubeadm token create --print-join-command
然后执行命令:
#如果环境不干净,可以先清除环境
kubeadm reset
rm -rf /root/.kube/*
#然后:
kubeadm join 192.168.9.10:6443 --token 2wrsgm.omdwtzrk7cdrisrm --discovery-token-ca-cert-hash sha256:669cc1f43025e3b29bee44f882804bc0315e3d9a73d87ab407fcd62637bd9e2c
查看node节点状态
[root@master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready master 33m v1.18.1
node1 Ready <none> 2m8s v1.18.1
node2 Ready <none> 19s v1.18.1
使用calico网络插件
网址:https://projectcalico.docs.tigera.io/
直接apply
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
#一直等,然后查看calico相关的镜像,并将其打包scp到node1,node2节点中去
docker save --output calico-kube-controllers.tar calico/kube-controllers:v3.21.4
docker save --output calico-cni.tar calico/cni:v3.21.4
docker save --output calico-pod2daemon-flexvol.tar calico/pod2daemon-flexvol:v3.21.4
docker save --output calico-node.tar calico/node:v3.21.4
docker save --output pause.tar k8s.gcr.io/pause:3.2
docker save --output flannel.tar quay.io/coreos/flannel:v0.14.0
#scp
scp calico-* pause.tar proxy.tar root@node1:/root/
#docker load
docker load -i calico-cni.tar
docker load -i calico-kube-controllers.tar
docker load -i calico-node.tar
docker load -i calico-pod2daemon-flexvol.tar
docker laod -i pause.tar
docker load -i proxy.tar
#然后在加入集群
#来个测试文件
[root@master ~]# docker pull nginx
#ff.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx
namespace: default
labels:
app: nginx
version: v1
spec:
containers:
- name: nginx-con
image: nginx
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: svc1
namespace: default
spec:
selector:
app: nginx
version: v1
ports:
- port: 82
targetPort: 80
卸载k8s集群
kubeadm reset
rm -rf /root/.kube/*
更多推荐
所有评论(0)