目录
一、基础环境部署
二、容器环境部署
三、cri环境操作
四、Harbor私有镜像仓库部署
五、k8s集群初始化
六、命令TAB补充
一、基础环境部署
1.1 基本信息你要知道
1.2 主机名ip规划
IP地址 | 主机名规划 |
10.0.0.10 | kubernetes-master.sswang.com kubernetes-master |
10.0.0.11 | kubernetes-node1.sswang.com kubernetes-node1 |
10.0.0.12 | kubernetes-node2.sswang.com kubernetes-node2 |
10.0.0.100 | kubernetes-register.sswang.com kubernetes-register |
1.3 基础配置(所有主机操作)
跨主机免密码认证(方便master主机拷贝文件给其他主机)
# 生成秘钥对
ssh-keygen -t rsa
跨主机免密码认证
ssh-copy-id root@远程主机ip地址
基础环境配置
# 各个主机设置自己的主机名
hostnamectl set-hostname xxxx
# 将 SELinux 设置为 disabled 模式(相当于将其禁用)
sed -i 's/enforcing/disabled/' /etc/selinux/config && setenforce 0
# 关闭防火墙
systemctl stop firewalld && systemctl disable firewalld
#主机解析
#/etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
10.0.0.10 kubernetes-master.sswang.com kubernetes-master
10.0.0.11 kubernetes-node1.sswang.com kubernetes-node1
10.0.0.12 kubernetes-node2.sswang.com kubernetes-node2
10.0.0.100 kubernetes-register.sswang.com kubernetes-register
# Swap环境配置
# 临时禁用
swapoff -a
# 永久禁用
sed -i 's/.*swap.*/#&/' /etc/fstab
# 内核参数调整
cat >> /etc/sysctl.d/k8s.conf << EOF
vm.swappiness=0
EOF
sysctl -p /etc/sysctl.d/k8s.conf
网络参数调整(所有主机操作)
# 配置iptables参数,使得流经网桥的流量也经过iptables/netfilter防火墙
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
# 配置生效
modprobe br_netfilter
modprobe overlay
sysctl -p /etc/sysctl.d/k8s.conf
二、容器环境部署
注意:所有主机操作
2.1 部署docker软件源
#配置阿里镜像源
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# 添加软件源信息
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安装最新版docker
yum list docker-ce --showduplicates | sort -r
yum install -y docker-ce
systemctl enable docker && systemctl start docker
#配置镜像加速,cgroup drivcer调整、私有镜像仓库
#国内无法拉取docker镜像但某些云镜像加速还可以用,华为镜像加速不会的可以参考https://cloud.tencent.com/developer/article/2434428
cat >> /etc/docker/daemon.json <<-EOF
{
"registry-mirrors": ["https://你的地址.mirror.swr.myhuaweicloud.com"],
"insecure-registries": ["kubernetes-register.sswang.com"],
"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
#重启docker服务
systemctl restart docker
#检查
docker info
docker pull nginx
三、cri环境操作
注意:所有主机操作
1.23 之前kubelet可以直接操控底层容器环境
1.24 之后则需要通过cri服务
#下载软件
mkdir /data/softs -p && cd /data/softs
wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.2/cri-dockerd-0.3.2.amd64.tgz
#解压软件
tar xf cri-dockerd-0.3.2.amd64.tgz
mv cri-dockerd/cri-dockerd /usr/local/bin/
#检查效果
cri-dockerd --version
#定制配置文件
cat > /etc/systemd/system/cri-dockerd.service<<-EOF
[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
[Service]
Type=notify
ExecStart=/usr/local/bin/cri-dockerd --pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.9
--network-plugin=cni --cni-conf-dir=/etc/cni/net.d --cni-bin-dir=/opt/cni/bin --container-runtime-endpoint=unix:///var/run/cri-dockerd.sock --cri-dockerd-root-directory=/var/lib/dockershim --docker-endpoint=unix:///var/run/docker.sock --cri-dockerd-root-directory=/var/lib/docker
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
EOF
#定制配置
cat > /etc/systemd/system/cri-dockerd.socket <<-EOF
[Unit]
Description=CRI Docker Socket for the API
PartOf=cri-docker.service
[Socket]
ListenStream=/var/run/cri-dockerd.sock
SocketMode=0660
SocketUser=root
SocketGroup=docker
[Install]
WantedBy=sockets.target
EOF
#设置服务开机自启动
systemctl daemon-reload
systemctl enable cri-dockerd.service
systemctl restart cri-dockerd.service
四、Harbor私有镜像仓库部署
注意:kubernetes-register主机操作
4.1 准备工作
如果下载的比较慢可以网盘下载(注意版本是2.9.1的与下面的代码版本不一致记得更改)
链接:https://pan.baidu.com/s/1oTqDTmO4b4F1ht2KxFwknA?pwd=dr63
提取码:dr63
# 安装docker-compose
yum install -y docker-compose
# 下载软件
mkdir /data/{softs,server} -p && cd /data/softs
wget https://github.com/goharbor/harbor/releases/download/v2.5.0/harbor-offline-installer-v2.5.0.tgz
# 解压软件
tar -zxvf harbor-offline-installer-v2.5.0.tgz -C /data/server/
cd /data/server/harbor/
# 加载镜像
docker load < harbor.v2.5.0.tar.gz
docker images
# 备份配置
cp harbor.yml.tmpl harbor.yml
4.2 配置harbor
# 修改配置
[root@kubernetes-register /data/server/harbor]# vim harbor.yml
hostname: kubernetes-register.sswang.com #私有仓库主机名
http:
port: 80
#https: 注释ssl相关的部分
# port: 443
# certificate: /your/certificate/path
# private_key: /your/private/key/path
# 修改harbor的登录密码
harbor_admin_password: 123456
# 设定harbor的数据存储目录
data_volume: /data/server/harbor/data
# 配置harbor
[root@kubernetes-register /data/server/harbor]# ./prepare
# 启动harbor
[root@kubernetes-register /data/server/harbor]# ./install.sh
# 检查效果
[root@kubernetes-register /data/server/harbor]# docker-compose ps
4.3 定制服务启动文件(拓展)
# 先关掉docker-compose
docker-compose down
# 定制服务启动文件 /etc/systemd/system/harbor.service
[Unit]
Description=Harbor
After=docker.service systemd-networkd.service systemd-resolved.service
Requires=docker.service
Documentation=http://github.com/vmware/harbor
[Service]
Type=simple
Restart=on-failure
RestartSec=5
# 需要注意harbor的安装位置
ExecStart=/usr/bin/docker-compose --file /data/server/harbor/docker-compose.yml up
ExecStop=/usr/bin/docker-compose --file /data/server/harbor/docker-compose.yml down
[Install]
WantedBy=multi-user.target
=========================================================================================
# 加载服务配置文件
systemctl daemon-reload
# 启动服务
systemctl start harbor
# 检查状态
systemctl status harbor
# 设置开机自启动
systemctl enable harbor
4.4 Harbor仓库定制
浏览器访问域名,用户名: admin, 密码:123456
创建sswang用户专用的项目仓库,名称为 sswang,权限为公开的
创建完用户后右上角退出用刚创建的用户重新登录
新建项目设置为公开
4.5 如何为Harbor仓库提交镜像
1. 镜像打标签
-- 必须携带harbor主机地址
2. 登录harbor
docker login
3. 提交镜像
docker pull
# 下载镜像
docker pull tomcat
# 定制镜像标签
#docker tag --help
#Usage: docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
docker tag tomcat kubernetes-register.sswang.com/sswang/tomcat:9.0.43
# 登录仓库
docker login kubernetes-register.sswang.com -u sswang
Password: # 输入登录密码 A12345678a
# 推送镜像
docker push kubernetes-register.sswang.com/sswang/tomcat:9.0.43
# 其他主机从私有仓库拉取
docker pull kubernetes-register.sswang.com/sswang/tomcat:9.0.43
五、k8s集群初始化
5.1 软件源定制以及安装软件
新版配置方法
新版 kubernetes 源使用方法和之前有一定区别,请求按照如下配置方法配置使用。
其中新版 kubernetes 源按照安装版本区分不同仓库,该文档示例为配置 1.27 版本,如需其他版本请在对应位置字符串替换即可。
(比如需要安装 1.29 版本,则需要将如下配置中的 v1.28 替换成 v1.29)
(目前该源支持 v1.24 - v1.29 版本,后续版本会持续更新)
Kubeadm:集群管理使用
Kubectl:管理集群资源对象环境,master节点专用
Kubelet:采集节点数据汇报给master
# 定制阿里云的关于kubernetes的软件源
cat <<EOF | tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.27/rpm/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.27/rpm/repodata/repomd.xml.key
EOF
setenforce 0
yum install -y kubelet kubeadm kubectl
systemctl enable kubelet && systemctl start kubelet
5.2 镜像获取
创建个google_containers仓库
检查镜像文件列表
kubeadm config images list
获取镜像文件
images=$(kubeadm config images list --kubernetes-version=1.27.16 | awk -F "/" '{print $NF}')
for i in ${images}
do
docker pull registry.aliyuncs.com/google_containers/$i
docker tag registry.aliyuncs.com/google_containers/$i kubernetes-register.sswang.com/google_containers/$i
docker push kubernetes-register.sswang.com/google_containers/$i
docker rmi registry.aliyuncs.com/google_containers/$i
done
5.3 master主节点初始化
环境初始化命令
kubeadm init --kubernetes-version=1.27.16 \
--apiserver-advertise-address=10.0.0.10 \
--image-repository kubernetes-register.sswang.com/google_containers \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16 \
--ignore-preflight-errors=Swap \
--cri-socket=unix:///var/run/cri-dockerd.sock
#--kubernetes-version 版本
#--apiserver-advertise-address master入口
#--image-repository 镜像仓库
#--ignore-preflight-errors 忽略错误
#--cri-socket 容器引擎
定制kubernetes的登录权限
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
5.4 工作节点加入集群
kubeadm join 10.0.0.10:6443 --token avbij5.qos2mqllby3pjewu --discovery-token-ca-cert-hash sha256:65d7d372058c45b15a386b329055c80c399ad63bd5b2bd43c85b8e3c9e568f7a --cri-socket=unix:///var/run/cri-dockerd.sock
5.5 flannel网络部署
# 网络定制
mkdir /data/kubernetes/flannel -p
cd /data/kubernetes/flannel
# 获取配置文件
wget https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
# 定制镜像标签
for i in $(grep image kube-flannel.yml | grep -v '#' | awk -F '/' '{print $NF}')
do
docker pull flannel/$i
docker tag flannel/$i kubernetes-register.sswang.com/google_containers/$i
docker push kubernetes-register.sswang.com/google_containers/$i
docker rmi flannel/$i
done
# 备份配置文件
cp kube-flannel.yml{,.bak}
如果拉取不了换一个国内的重新打个标签
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/flannel/flannel:v0.25.5
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/flannel/flannel-cni-plugin:v1.5.1-flannel1
docker tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/flannel/flannel:v0.25.5 kubernetes-register.sswang.com/google_containers/flannel:v0.25.5
docker tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/flannel/flannel-cni-plugin:v1.5.1-flannel1 kubernetes-register.sswang.com/google_containers/flannel-cni-plugin:v1.5.1-flannel1
修改配置文件
修改配置文件
sed -i '/ image:/s/docker.io\/flannel/kubernetes-register.sswang.com\/google_containers/' kube-flannel.yml
[root@kubernetes-master flannel]# grep image: kube-flannel.yml
image: kubernetes-register.sswang.com/google_containers/flannel-cni-plugin:v1.5.1-flannel1
image: kubernetes-register.sswang.com/google_containers/flannel:v0.25.5
image: kubernetes-register.sswang.com/google_containers/flannel:v0.25.5
应用配置文件
kubectl apply -f kube-flannel.yml
检查效果
[root@kubernetes-master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
kubernetes-master Ready control-plane 19h v1.27.16
kubernetes-node1 Ready <none> 19h v1.27.16
kubernetes-node2 Ready <none> 19h v1.27.16
六、命令TAB补充
放到master主机的环境文件中
echo "source <(kubectl completion bash)" >> ~/.bashrc
echo "source <(kubeadm completion bash)" >> ~/.bashrc
source ~/.bashrc
如果遇到以下错误:
[root@kubernetes-master ~]# kubectl c-bash: _get_comp_words_by_ref: command not found
解决方法:
# 安装bash-completion
[root@kubernetes-master ~]# yum install bash-completion -y
# 执行bash_completion
[root@kubernetes-master ~]# source /usr/share/bash-completion/bash_completion
# 重新加载
source ~/.bashrc