因为个人需要进行在本地测试k8s环境所以在此记录,本人是在腾讯云中进行操作

一、步骤

1.基础环境配置

关闭防火墙: 如果是云服务器,需要设置安全组策略放行端口

systemctl stop firewalld
systemctl disable firewalld

修改hostname

hostnamectl set-hostname k8s-01
bash
#查看修改结果
hostnamectl status

设置hostname解析(如果是单机可以选中不执行该步骤)

echo "127.0.0.1   $(hostname)" >> /etc/hosts

关闭selinux

sed -i 's/enforcing/disabled/' /etc/selinux/config
setenforce 0

关闭swap

swapoff -a 
sed -ri 's/.*swap.*/#&/' /etc/fstab 

允许iptables检测桥接流量

#将桥接的 IPv4 流量传递到 iptables 的链:
# 修改 /etc/sysctl.conf
# 如果有配置,则修改
sed -i "s#^net.ipv4.ip_forward.*#net.ipv4.ip_forward=1#g"  /etc/sysctl.conf
sed -i "s#^net.bridge.bridge-nf-call-ip6tables.*#net.bridge.bridge-nf-call-ip6tables=1#g"  /etc/sysctl.conf
sed -i "s#^net.bridge.bridge-nf-call-iptables.*#net.bridge.bridge-nf-call-iptables=1#g"  /etc/sysctl.conf
sed -i "s#^net.ipv6.conf.all.disable_ipv6.*#net.ipv6.conf.all.disable_ipv6=1#g"  /etc/sysctl.conf
sed -i "s#^net.ipv6.conf.default.disable_ipv6.*#net.ipv6.conf.default.disable_ipv6=1#g"  /etc/sysctl.conf
sed -i "s#^net.ipv6.conf.lo.disable_ipv6.*#net.ipv6.conf.lo.disable_ipv6=1#g"  /etc/sysctl.conf
sed -i "s#^net.ipv6.conf.all.forwarding.*#net.ipv6.conf.all.forwarding=1#g"  /etc/sysctl.conf
# 可能没有,追加
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
echo "net.bridge.bridge-nf-call-ip6tables = 1" >> /etc/sysctl.conf
echo "net.bridge.bridge-nf-call-iptables = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.default.disable_ipv6 = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.lo.disable_ipv6 = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.all.forwarding = 1"  >> /etc/sysctl.conf
# 执行命令以应用
sysctl -p

2.安装docker

#删除docker系统中存在的docker相关遗留程序
sudo yum remove docker*
sudo yum install -y yum-utils
#配置docker yum 源
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#安装docker 19.03.9
yum install -y docker-ce-3:19.03.9-3.el7.x86_64  docker-ce-cli-3:19.03.9-3.el7.x86_64 containerd.io
#安装docker 19.03.9   docker-ce  19.03.9
yum install -y docker-ce-19.03.9-3  docker-ce-cli-19.03.9 containerd.io
#启动服务
systemctl start docker
systemctl enable docker
#配置阿里加速
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://82m9ar63.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

3.安装k8s

##配置k8s阿里云镜像源
cat <<EOF > /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
EOF
# 卸载旧版本
yum remove -y kubelet kubeadm kubectl

# 查看可以安装的版本
yum list kubelet --showduplicates | sort -r

# 安装kubelet、kubeadm、kubectl 指定版本
yum install -y kubelet-1.21.0 kubeadm-1.21.0 kubectl-1.21.0

# 开机启动kubelet
systemctl enable kubelet && systemctl start kubelet

4.初始化k8s

############下载核心镜像 kubeadm config images list:查看需要哪些镜像###########
####封装成images.sh文件
mkdir images.sh

images=(
kube-apiserver:v1.21.0
kube-proxy:v1.21.0
kube-controller-manager:v1.21.0
kube-scheduler:v1.21.0
coredns:v1.8.0
etcd:3.4.13-0
pause:3.4.1
)
for imageName in ${images[@]} ; do
docker pull registry.cn-hangzhou.aliyuncs.com/hzx_k8s_images/$imageName
done
####因为国内拉去镜像需要限流所以需要从阿里云进行拉去
#####封装结束
chmod +x images.sh && ./images.sh

#k8s安装初始化
kubeadm init \
--apiserver-advertise-address=10.0.8.3 \
--image-repository registry.cn-hangzhou.aliyuncs.com/hzx_k8s_images \
--kubernetes-version v1.21.0 \
--service-cidr=10.96.0.0/16 \
--pod-network-cidr=192.168.0.0/16
#--apiserver-advertise-address=192.168.180.123    

#这个参数就是master主机的IP地址,例如我的Master主机的IP是:10.0.8.3
#注意:如果用的时候云服务器一定要用内网IP

#--image-repository=registry.aliyuncs.com/google_containers 

#这个是镜像地址,由于国外地址无法访问,故使用的阿里云仓库地址:registry.aliyuncs.com/

#--kubernetes-version=v1.21.0  

#这个参数是下载的k8s软件版本号

#--service-cidr=10.96.0.0/12     

#这个参数后的IP地址直接就套用10.96.0.0/12 ,以后安装时也套用即可,不要更改

#--pod-network-cidr=10.244.0.0/16     
#k8s内部的pod节点之间网络可以使用的IP段,不能和service-cidr写一样,如果不知道怎么配,就先用这个192.168.0.0/16

#结束以后,按照控制台引导继续往下
## 第一步
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

##第二步
export KUBECONFIG=/etc/kubernetes/admin.conf

##第三步 部署网络插件
curl https://raw.githubusercontent.com/projectcalico/calico/v3.25.0/manifests/calico.yaml -O
kubectl apply -f calico.yaml

##第四步,用控制台打印的kubeadm join 去其他node节点执行,需要添加集群的情况下需要执行
kubeadm join 10.170.11.8:6443 --token cnb7x2.lzgz7mfzcjutn0nk \
    --discovery-token-ca-cert-hash sha256:00c9e977ee52632098aadb515c90076603daee94a167728110ef8086d0d5b37d

5.验证

5.1.查看各个组件是否Running

5.2.创建一个pod进行测试是否Running

kubectl run nginx --image=nginx

检查状态

发现状态一直处于Pending状态

5.3.k8smaster成为node工作节点

因为k8s默认是不会再master节点上进行工作然而我们并没有指定pod所以需要mater进行配置node工作节点设置

kubectl taint nodes --all node-role.kubernetes.io/master- // 开启
kubectl taint nodes k8s node-role.kubernetes.io/master=true:NoSchedule  // 禁用

然后进行查看nginx状态是否为Running

6.设置ipvs模式

k8s整个集群为了访问通;默认是用iptables,性能下(kube-proxy在集群之间同步iptables的内容)

6.1查看

kubectl logs -n kube-system kube-proxy-28xv4

6.2修改kube-proxy的配置文件,修改为mode为lpvs。默认iptables,但是集群变大之后就会变得很慢

修改入下

kubectl edit cm kube-proxy -n kube-system
ipvs:
      excludeCIDRs: null
      minSyncPeriod: 0s
      scheduler: ""
      strictARP: false
      syncPeriod: 30s
    kind: KubeProxyConfiguration
    metricsBindAddress: 127.0.0.1:10249
    mode: "ipvs"
 ###修改了kube-proxy的配置,为了让重新生效,需要杀掉以前的Kube-proxy
 kubectl get pod -A|grep kube-proxy
 kubectl delete pod kube-proxy-pqgnt -n kube-system
### 修改完成后可以重启kube-proxy以生效

至此kubernetes-单机已经搭建完成,如果大家在搭建时发现其中有什么问题或者有什么疑问都可以在评论留言,谢谢


Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐