- 环境基于VMware虚拟机搭建
安装三台centos ip地址分别为
master 198.168.44.141
node1 198.168.44.142
node2 198.168.44.143
- vmware 网络配置如下
固定虚拟机ip 使用命令 ip addr 查看ip
此处ip地址为 192.168.44.141 我们要将他固定下来,不然重启虚拟机后IP有可能会改变
打开/etc/sysconfig/network-scripts目录
cd /etc/sysconfig/network-scripts
查看文件
将文件内容改成如下
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
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
#UUID=12f37e26-996e-4168-ba8a-0c85cf8ba742
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.44.141
GATEWAY=192.168.44.2
DNS1=8.8.8.8
PREFIX=24
重启网络
service network restart
其他两台按照以上操作固定好ip
下面是固定后的操作
关闭服务器防火墙
systemctl disable firewalld --now
setenforce 0
sed -i -r 's/SELINUX=[ep].*/SELINUX=disabled/g' /etc/selinux/config
设置hosts解析
cat >> /etc/hosts << EOF
192.168.44.141 k8s-master
192.168.44.142 k8s-node-1
192.168.44.143 k8s-node-2
EOF
修改主机名
hostnamectl set-hostname k8s-master && bash
配置时间(如果时间比较大,k8s会有一些异常,比如加入失败什么的)
yum -y install ntpdate
ntpdate ntp1.aliyun.com
关闭swap(k8s要求的)
swapoff --all
修改Linux内核参数,添加网桥过滤器和地址转发功能
modprobe br_netfilter
cat >> /etc/sysctl.d/kubernetes.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
sysctl -p /etc/sysctl.d/kubernetes.conf
安装docker
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum makecache
# yum-utils软件用于提供yum-config-manager程序
yum install -y yum-utils
# 使用yum-config-manager创建docker阿里存储库
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install docker-ce-20.10.6 docker-ce-cli-20.10.6 -y
配置加速,我使用的是阿里云的加速,加速地址可以去阿里云申请一个
mkdir /etc/docker
cat <<EOF > /etc/docker/daemon.json
{
"registry-mirrors": ["填自己申请的或者百度一个"],
"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
启用docker 服务
systemctl enable docker --now
安装docker-cri
1.24之后的版本,k8s默认容器就不是docker了,如果想要继续使用docker 就要安装docker-cri
我这里是直接本地下载之后上传到虚拟机的,我的虚拟机没法访问github
wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.1/cri-dockerd-0.3.1-3.el7.x86_64.rpm
rpm -ivh cri-dockerd-0.3.1-3.el7.x86_64.rpm
更新/usr/lib/systemd/system/cri-docker.service
[Unit]
Description=CRI Interface for Docker Application Container Engine
Documentation=https://docs.mirantis.com
After=network-online.target firewalld.service docker.service
Wants=network-online.target
Requires=cri-docker.socket
[Service]
Type=notify
ExecStart=/usr/bin/cri-dockerd --network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.7
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always
StartLimitBurst=3
StartLimitInterval=60s
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
Delegate=yes
KillMode=process
[Install]
WantedBy=multi-user.target
启用cri
systemctl daemon-reload
systemctl start cri-docker.service
systemctl enable cri-docker.service
配置k8s源
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=0
EOF
安装kubelet ,kubeadmin,kubectl
yum install -y kubelet-1.27.0 kubeadm-1.27.0 kubectl-1.27.0
开启kubelet,不开启会执行不了命令
systemctl enable kubelet.service --now
创建 kubeadm-init.yaml文件内容如下
apiVersion: kubeadm.k8s.io/v1beta3
bootstrapTokens:
- groups:
- system:bootstrappers:kubeadm:default-node-token
token: abcdef.0123456789abcdef
ttl: 24h0m0s
usages:
- signing
- authentication
kind: InitConfiguration
localAPIEndpoint:
advertiseAddress: 192.168.44.141#本机ip
bindPort: 6443
nodeRegistration:
criSocket: unix:///var/run/cri-dockerd.sock
imagePullPolicy: IfNotPresent
name: k8s-master # 这里填写的是主机名
taints: null
---
apiServer:
timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta3
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns: {}
etcd:
local:
dataDir: /var/lib/etcd
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers #加速地址
kind: ClusterConfiguration
kubernetesVersion: 1.27.0
networking:
dnsDomain: cluster.local
serviceSubnet: 10.96.0.0/12
scheduler: {}
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs
---
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
cgroupDriver: systemd
kubeadm 初始化
kubeadm init --config=kubeadm.yaml
配置kubectl的配置文件config,相当于对kubectl进行授权,这样kubectl命令可以使用这个证书对k8s集群进行管理
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
可以使用命令行生产的加入命令,在客户端执行就可以了
也可以用
kubeadm token create --print-join-command
重新生成一条join命令
加入之后使用如下命令查看节点(在主节点执行,客户端不行),可以看到节点的状态都是noteReady
kubectl get nodes
接下来我们需要安装网络插件calico ,照着官网做就可以了
安装calico之后再次查看节点状态
kubectl get nodes
可以看到状态都是ready
查看系统pod
kubectl get pod -n kube-system -owide
全部显示running 并且ready为1/1才对
到这里k8s就已经安装好了了
我们创建一个简单的Deployment测试一下,创建一个为nginx-test.yaml的文件内容如下
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
namespace: default
labels:
app: nginx
spec:
selector:
matchLabels:
app: nginx
replicas: 3
template:
metadata:
labels:
app: nginx
spec:
# initContainers:
# Init containers are exactly like regular containers, except:
# - Init containers always run to completion.
# - Each init container must complete successfully before the next one starts.
containers:
- name: nginx
image: nginx:latest
然后执行
kubectl apply -f nginx-test.yaml
这里显示部署已经可以了
查看一下容器状态
kubectl get pod -owide
显示的状态都是running没有什么问题
接下来我们测试一下
curl 172.16.109.68
可以看到nginx 可以正确返回
到这里基本上就没啥问题了,后续还有一个ingress没有安装,下一篇我在安装一下