k8s--部署--01--在线--单master
journald 默认将日志转发给 rsyslog,这会导致日志写了多份,/var/log/messages 中包含了太多无关日志,不方便后续查看,同时也影响系统性能。systemd的journald 是 Centos 7 缺省的日志记录工具,它记录了所有系统、内核、Service Unit 的日志。不开启ipvs将会使用iptables,但是效率低,所以官网推荐需要开通ipvs内核。x86_64
·
k8s–部署–01–在线–单master
1、介绍
1.1、机器介绍
主机名 | IP | 说明 |
---|---|---|
master1 | 192.168.187.111 | 4核8G,硬盘20G,核数最小要求是2 |
node1 | 192.168.187.112 | 4核8G,硬盘20G,核数最小要求是2 |
1.2、软件环境
- 操作系统:centos
- docker版本:docker-ce-20.10.9-3.el7(k8s-1.23.6版本最高支持验证)
- Kubernetes版本:Kubernetes-1.23.6(高版本操作docker需要安装cri-dockerd,环境不好配置)
1.3、安装步骤
1.3.1、公共步骤
- 集群hosts规划,集群环境访问需要
- 服务器时间同步
- 关闭无关的服务
- 设置 rsyslogd 和 systemd journald
- 禁用selinux、firewalld、swap
- 内核配置
- 安装ipvsadm
- 安装指定版本docker
- kubeadm、kubelet、kubectl安装
- 更改kubelet的容器路径(如果需要的话,不需要可以跳过,我就没做)
1.3.2、集群步骤
- 初始化主节点(仅master节点上操作)
- 容器网络安装calico(仅master节点上操作)
- 初始化k8s集群(子节点加入到集群中)
1.3.3、测试
安装nginx
2、公共步骤
所有机器都要做
2.1、集群hosts规划,集群环境访问需要
2.1.1、修改主机名
hostnamectl set-hostname master1
hostnamectl set-hostname node1
2.1.2、配置hosts文件
cat >> /etc/hosts <<EOF
192.168.187.111 master1
192.168.187.112 node1
EOF
2.2、服务器时间同步
# 设置系统时区为 中国/上海
timedatectl set-timezone Asia/Shanghai
# 将当前的 UTC 时间写入硬件时钟
timedatectl set-local-rtc 0
# 重启依赖于系统时间的服务
systemctl restart rsyslog
systemctl restart crond
# 更新系统时间 ,如果没有安装,使用这个命令安装:yum -y install ntpdate
ntpdate cn.pool.ntp.org
2.3、关闭无关的服务
systemctl stop postfix && systemctl disable postfix
2.4、设置 rsyslogd 和 systemd journald
systemd的journald 是 Centos 7 缺省的日志记录工具,它记录了所有系统、内核、Service Unit 的日志。
systemd journald 有如下优势:
- 可以记录到内存或文件系统;(默认记录到内存,对应的位置为 /run/log/jounal)
- 可以限制占用的磁盘空间、保证磁盘剩余空间;
- 可以限制日志文件大小、保存的时间;
journald 默认将日志转发给 rsyslog,这会导致日志写了多份,/var/log/messages 中包含了太多无关日志,不方便后续查看,同时也影响系统性能。
mkdir /var/log/journal # 持久化保存日志的目录
mkdir /etc/systemd/journald.conf.d
cat > /etc/systemd/journald.conf.d/99-prophet.conf <<EOF
[Journal]
# 持久化保存到磁盘
Storage=persistent
# 压缩历史日志
Compress=yes
SyncIntervalSec=5m
RateLimitInterval=30s
RateLimitBurst=1000
# 最大占用空间 10G
SystemMaxUse=10G
# 单日志文件最大 200M
SystemMaxFileSize=200M
# 日志保存时间 2 周
MaxRetentionSec=2week
# 不将日志转发到 syslog
ForwardToSyslog=no
EOF
# 重启systemd-journald
systemctl restart systemd-journald
2.5、禁用selinux、firewalld、swap
# 停止防火墙
systemctl stop firewalld
# 禁用防火墙
systemctl disable firewalld
# 禁用selinux
# 将 selinux 文件中的 SELINUX=enforcing 替换为 SELINUX=disabled
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/sysconfig/selinux
# 将 config 文件中的 SELINUX=enforcing 替换为 SELINUX=disabled
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
# 永久禁用swap分区,/etc/fstab中注释掉swap那一行。
sed -i 's/.*swap.*/#&/' /etc/fstab
2.6、内核配置
2.6.1、kubernetes.conf
cat > /etc/sysctl.d/kubernetes.conf << EOF
net.ipv4.ip_forward = 1 # 地址转发
net.bridge.bridge-nf-call-iptables = 1 # 添加网桥过滤
net.bridge.bridge-nf-call-ip6tables = 1 # 添加网桥过滤
fs.may_detach_mounts = 1
net.ipv4.conf.all.route_localnet = 1
vm.overcommit_memory=1 # 不检查物理内存是否够用
vm.swappiness=0 # 禁止使用 swap 空间,只有当系统 OOM 时才允许使用它
vm.panic_on_oom=0 #开启 OOM
fs.inotify.max_user_instances=8192
fs.inotify.max_user_watches=1048576
fs.file-max=52706963
fs.nr_open=52706963
net.ipv6.conf.all.disable_ipv6=1
net.netfilter.nf_conntrack_max=2310720
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_intvl =15
net.ipv4.tcp_max_tw_buckets = 36000
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_max_orphans = 327680
net.ipv4.tcp_orphan_retries = 3
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.ip_conntrack_max = 65536
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_timestamps = 0
net.core.somaxconn = 16384
EOF
# 生效命令
sysctl --system
2.6.2、配置limits
vim /etc/security/limits.conf
# 末尾添加
* soft nofile 65536
* hard nofile 131072
* soft nproc 65535
* hard nproc 655350
* soft memlock unlimited
* hard memlock unlimited
2.6.3、重启服务
# 重启服务
systemctl reboot
2.7、安装ipvsadm
不开启ipvs将会使用iptables,但是效率低,所以官网推荐需要开通ipvs内核
2.7.1、安装ipvsadm
# 安装ipvsadm
yum install -y ipvsadm ipset sysstat conntrack libseccomp
2.7.2、配置ipvs模块
# 配置ipvs模块
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
2.7.3、修改ipvs.conf配置文件
vim /etc/modules-load.d/ipvs.conf
# 加入以下内容
ip_vs
ip_vs_lc
ip_vs_wlc
ip_vs_rr
ip_vs_wrr
ip_vs_lblc
ip_vs_lblcr
ip_vs_dh
ip_vs_sh
ip_vs_fo
ip_vs_nq
ip_vs_sed
ip_vs_ftp
ip_vs_sh
nf_conntrack
ip_tables
ip_set
xt_set
ipt_set
ipt_rpfilter
ipt_REJECT
ipip
2.7.4、启动
systemctl enable --now systemd-modules-load.service
# 查看
[root@master1 ~]# lsmod | grep --color=auto -e ip_vs -e nf_conntrack
ip_vs_sh 12688 0
ip_vs_wrr 12697 0
ip_vs_rr 12600 0
ip_vs 145458 6 ip_vs_rr,ip_vs_sh,ip_vs_wrr
nf_conntrack 139264 1 ip_vs
libcrc32c 12644 3 xfs,ip_vs,nf_conntrack
2.8、安装指定版本docker
2.8.1、安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
2.8.2、添加软件源信息
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 修改配置
sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
2.8.3、更新软件源缓存,如果centos版本大于7,使用sudo yum makecache即可
sudo yum makecache fast
2.8.4、查看docker版本列表
x86_64(x86架构)
# 查看docker版本列表
[root@master1 ~]# yum list docker-ce --showduplicates | sort -r
已加载插件:fastestmirror
已安装的软件包
可安装的软件包
* updates: mirrors.aliyun.com
Loading mirror speeds from cached hostfile
* extras: mirrors.aliyun.com
docker-ce.x86_64 3:24.0.7-1.el7 docker-ce-stable
docker-ce.x86_64 3:24.0.6-1.el7 docker-ce-stable
docker-ce.x86_64 3:24.0.5-1.el7 docker-ce-stable
docker-ce.x86_64 3:24.0.4-1.el7 docker-ce-stable
docker-ce.x86_64 3:24.0.3-1.el7 docker-ce-stable
docker-ce.x86_64 3:24.0.2-1.el7 docker-ce-stable
docker-ce.x86_64 3:24.0.1-1.el7 docker-ce-stable
docker-ce.x86_64 3:24.0.0-1.el7 docker-ce-stable
docker-ce.x86_64 3:23.0.6-1.el7 docker-ce-stable
docker-ce.x86_64 3:23.0.5-1.el7 docker-ce-stable
docker-ce.x86_64 3:23.0.4-1.el7 docker-ce-stable
docker-ce.x86_64 3:23.0.3-1.el7 docker-ce-stable
docker-ce.x86_64 3:23.0.2-1.el7 docker-ce-stable
docker-ce.x86_64 3:23.0.1-1.el7 docker-ce-stable
docker-ce.x86_64 3:23.0.0-1.el7 docker-ce-stable
docker-ce.x86_64 3:20.10.9-3.el7 docker-ce-stable
docker-ce.x86_64 3:20.10.9-3.el7 @docker-ce-stable
docker-ce.x86_64 3:20.10.8-3.el7 docker-ce-stable
docker-ce.x86_64 3:20.10.7-3.el7 docker-ce-stable
docker-ce.x86_64 3:20.10.6-3.el7 docker-ce-stable
docker-ce.x86_64 3:20.10.5-3.el7 docker-ce-stable
2.8.5、安装指定版本的Docker-CE: (VERSION例如上面的3:20.10.9-3.el7)
sudo yum install -y docker-ce-20.10.9-3.el7
2.8.6、启动docker
# 启动docker
systemctl start docker
# 设置开机启动
systemctl enable docker
2.8.7、配置docker,修改cgroup、log、镜像地址
cat > /etc/docker/daemon.json << EOF
{
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn/",
"https://hub-mirror.c.163.com/"
],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"cache-compress": "true",
"cache-disabled": "false",
"cache-max-file": "5",
"cache-max-size": "20m",
"env": "os,customer",
"max-file": "2",
"max-size": "100m"
}
}
EOF
2.8.8、重启docker服务
systemctl restart docker
2.9、kubeadm、kubelet、kubectl安装
# kubernetes镜像切换成国内源,baseurl中注意架构类型
# x86架构:baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
# arm架构:baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-aarch64/
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=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
# 安装指定版本 kubeadm、kubelet、kubectl
yum install -y kubelet-1.23.6 kubeadm-1.23.6 kubectl-1.23.6
# 开机自启动
systemctl enable kubelet
2.10、更改kubelet的容器路径(如果需要的话,不需要可以跳过,我就没做)
vim /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf
# 修改完之后配置文件如下
[Service]
Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --root-dir=/mnt/sdb_new/kubelet/ --kubeconfig=/etc/kubernetes/kubelet.conf"
# 使配置生效
systemctl daemon-reload
systemctl restart docker
systemctl restart kubelet
3、集群步骤
3.1、初始化主节点(仅master节点上操作)
kubeadm init \
--apiserver-advertise-address=192.168.187.111 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.23.6 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16
3.1.1、命令说明
- apiserver-advertise-address:集群通告地址(master 机器IP)
- image-repository:由于默认拉取镜像地址k8s.gcr.io,国内无法访问,这里指定阿里云镜像仓库地址
- kubernetes-version:K8s版本,与上面安装的一致
- service-cidr:集群内部虚拟网络,Pod统一访问入口,默认:10.96.0.0/12
- pod-network-cidr:Pod网络,与下面部署的CNI网络组件yaml中保持一致,默认:10.244.0.0/16
3.1.2、创建成功示例
[kubelet-finalize] Updating "/etc/kubernetes/kubelet.conf" to point to a rotatable kubelet client certificate and key
[addons] Applied essential addon: CoreDNS
[addons] Applied essential addon: kube-proxy
Your Kubernetes control-plane has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Alternatively, if you are the root user, you can run:
export KUBECONFIG=/etc/kubernetes/admin.conf
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
Then you can join any number of worker nodes by running the following on each as root:
# 后续子节点加入集群的命令
kubeadm join 192.168.187.111:6443 --token txbhsf.yqzxkeo7sdxobt1j \
--discovery-token-ca-cert-hash sha256:2c19030ed185bc30f86f9638d47f1cf6a237f06d454fa8638444ea933b9f12c6
lowing on each as root:
3.1.3、保存后续子节点加入集群的命令
kubeadm join 192.168.187.111:6443 --token txbhsf.yqzxkeo7sdxobt1j \
--discovery-token-ca-cert-hash sha256:2c19030ed185bc30f86f9638d47f1cf6a237f06d454fa8638444ea933b9f12c6
# 默认token有效期为24小时,当过期之后,该token就不可用了。这时就需要在master上重新创建token,创建命令如下
kubeadm token create --print-join-command
3.1.4、按要求执行后续步骤
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
# 查看节点状态
[root@master1 ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
master1 NotReady control-plane,master 60s v1.23.6
3.2、容器网络安装calico(仅master节点上操作)
# 下载网络组建的yaml文件,使用容器部署
wget https://docs.projectcalico.org/manifests/calico.yaml --no-check-certificate
# 修改文件网络地址配置
#修改里面定义Pod网络(CALICO_IPV4POOL_CIDR),与前面kubeadm init的 –pod-network-cidr指定的一样
# 示例:
# - name: CALICO_IPV4POOL_CIDR
# value: "10.244.0.0/16"
# 创建网络组件
kubectl apply -f calico.yaml
# 查看安装进度
kubectl get pods -n kube-system -w
3.3、初始化k8s集群(子节点加入到集群中)
# 在node节点上,执行master主节点初始化集群成功的加入命令,等待节点初始化完成
kubeadm join 192.168.187.111:6443 --token txbhsf.yqzxkeo7sdxobt1j \
--discovery-token-ca-cert-hash sha256:2c19030ed185bc30f86f9638d47f1cf6a237f06d454fa8638444ea933b9f12c6
# master上查看节点状态(需要等待一段时间)
[root@master1 ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master1 Ready control-plane,master 11m v1.23.6
node1 Ready <none> 4m4s v1.23.6
# 查看系统组件安装状态(需要等待一段时间)
[root@master1 ~]# kubectl get pod -n kube-system
NAME READY STATUS RESTARTS AGE
calico-kube-controllers-57c6dcfb5b-tb28k 1/1 Running 0 5m54s
calico-node-b9646 1/1 Running 0 5m54s
calico-node-d66hm 1/1 Running 0 5m30s
coredns-6d8c4cb4d-4lj4k 1/1 Running 0 12m
coredns-6d8c4cb4d-jfjc8 1/1 Running 0 12m
etcd-master1 1/1 Running 0 12m
kube-apiserver-master1 1/1 Running 0 12m
kube-controller-manager-master1 1/1 Running 0 12m
kube-proxy-62fp9 1/1 Running 0 12m
kube-proxy-h2z7g 1/1 Running 0 5m30s
kube-scheduler-master1 1/1 Running 0 12m
4、测试(master节点上操作)
部署nginx pod
4.1、nginx.yaml
vim nginx.yaml
内容
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
4.2、nginx-service.yaml
vim nginx-service.yaml
内容
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
type: NodePort
ports:
- protocol: TCP
port: 80
targetPort: 80
4.3、部署nginx服务
# 部署nginx服务
kubectl apply -f nginx.yaml
kubectl apply -f nginx-service.yaml
# 查看服务 (Running说明启动成功)
[root@master1 ~]# kubectl get pod,svc
NAME READY STATUS RESTARTS AGE
pod/nginx-deployment-85b98978db-tntd6 1/1 Running 0 2m2s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 27m
service/nginx-service NodePort 10.98.77.182 <none> 80:32224/TCP 2m
4.4、浏览器访问
http://192.168.187.111:32224/
更多推荐
已为社区贡献55条内容
所有评论(0)