kubeadm安装单节点k8s(容器运行时-docker)
设置节点名称(重新登录查看)
hostnamectl set-hostname master
vim /etc/hosts
尾部追加ip与节点名对应关系
关闭selinux
setenforce 0
sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config
关闭防火墙
systemctl stop firewalld && systemctl disable firewalld
设置iptables规则
iptables -F && iptables -X && iptables -F -t nat && iptables -X -t nat && iptables -P FORWARD ACCEPT
关闭swap
swapoff -a && free –h
同步服务器时间
yum install chrony -y
systemctl enable chronyd
systemctl start chronyd
chronyc sources
制作配置文件
cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_nonlocal_bind = 1
net.ipv4.ip_forward = 1
vm.swappiness = 0
vm.overcommit_memory = 1
EOF
生效文件
modprobe br_netfilter
sysctl -p /etc/sysctl.d/k8s.conf
使用 Containerd 仓库进行安装
yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install containerd.io -y
修改containerd配置
mkdir -p /etc/containerd
containerd config default > /etc/containerd/config.toml
替换配置文件
sed -i "s#k8s.gcr.io#registry.aliyuncs.com/google_containers#g" /etc/containerd/config.toml
sed -i '/containerd.runtimes.runc.options/a\ \ \ \ \ \ \ \ \ \ \ \ SystemdCgroup = true' /etc/containerd/config.toml
sed -i "s#https://registry-1.docker.io#https://registry.aliyuncs.com#g" /etc/containerd/config.toml
启动服务
systemctl daemon-reload
systemctl enable containerd
systemctl restart containerd
使用 k8s 仓库进行安装
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
yum install kubelet kubeadm kubectl -y
crictl config runtime-endpoint /run/containerd/containerd.sock
systemctl daemon-reload
systemctl enable kubelet && systemctl start kubelet
kubeadm初始化
kubeadm config print init-defaults > /k8s/kubeadm.yaml
修改kubeadm.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: 1.2.3.4 #修改ip(使用内网ip)
bindPort: 6443
nodeRegistration:
# criSocket: /var/run/dockershim.sock
criSocket: /run/containerd/containerd.sock
imagePullPolicy: IfNotPresent
name: node
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: k8s.gcr.io
imageRepository: registry.aliyuncs.com/google_containers #改成阿里云镜像地址
kind: ClusterConfiguration
kubernetesVersion: 1.23.0
networking:
dnsDomain: cluster.local
podSubnet: 10.244.0.0/16 #Pod网段,flannel插件需要使用这个网段
serviceSubnet: 10.96.0.0/12
scheduler: {}
kubeadm config images list --config /k8s/kubeadm.yaml
kubeadm config images pull --config /k8s/kubeadm.yaml
kubeadm init --config /k8s/kubeadm.yaml
使用k8s前需要配置kubectl
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
source ~/.bash_profile
安装网络插件flannel
wget https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
kubectl apply -f kube-flannel.yml
查看集群状态
[root@master ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
master Ready control-plane,master 7m34s v1.23.4
[root@master ~]# kubectl get all --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system pod/coredns-6d8c4cb4d-52nqv 1/1 Running 0 7m27s
kube-system pod/coredns-6d8c4cb4d-tbb8n 1/1 Running 0 7m27s
kube-system pod/etcd-master 1/1 Running 0 7m43s
kube-system pod/kube-apiserver-master 1/1 Running 0 7m41s
kube-system pod/kube-controller-manager-master 1/1 Running 0 7m41s
kube-system pod/kube-flannel-ds-r888v 1/1 Running 0 2m45s
kube-system pod/kube-proxy-jdfjv 1/1 Running 0 7m27s
kube-system pod/kube-scheduler-master 1/1 Running 0 7m41s
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
default service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 7m43s
kube-system service/kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP,9153/TCP 7m42s
NAMESPACE NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
kube-system daemonset.apps/kube-flannel-ds 1 1 1 1 1 <none> 2m45s
kube-system daemonset.apps/kube-proxy 1 1 1 1 1 kubernetes.io/os=linux 7m42s
NAMESPACE NAME READY UP-TO-DATE AVAILABLE AGE
kube-system deployment.apps/coredns 2/2 2 2 7m42s
NAMESPACE NAME DESIRED CURRENT READY AGE
kube-system replicaset.apps/coredns-6d8c4cb4d 2 2 2 7m27s
默认情况下,master节点不参与业务pod的调度,此时需要开启
kubectl taint node master node-role.kubernetes.io/master:NoSchedule //关闭,默认
kubectl taint node master node-role.kubernetes.io/master:NoSchedule- //开启
安装nginx
kubectl apply -f nginx-deployment.yaml
cat > nginx-deployment.yaml <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nginx
name: nginx-deployment
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- image: nginx:1.14.0
name: nginx
---
apiVersion: v1
kind: Service
metadata:
labels:
app: nginx
name: nginx-svc
spec:
type: NodePort
ports:
- port: 80
name: nginx-svc80
protocol: TCP
targetPort: 80
nodePort: 30080
selector:
app: nginx
EOF
访问nginx
http://IP:nodePort