利用kubeadmin搭建单节点k8s环境(ubuntu)

1.禁用swap

swapoff -a

同时将/etc/fstab文件的swap行用#注释(永久禁用)

2 关闭防火墙

sudo ufw disable

3 关闭SELinux,有两种方法
临时关闭:setenforce 0
永久关闭:修改/etc/selinux/config文件中设置SELINUX=disabled ,然后重启服务器

4 系统参数与内核模块

# 修改内核参数
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
执行以下命令使之生效
sysctl --system
# 加载内核模块
modprobe br_netfilter
lsmod | grep br_netfilter

5 添加GPG Key

curl -s https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | apt-key add -
curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -

6 配置apt源

add-apt-repository "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
echo "deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main" >>/etc/apt/sources.list.d/kubernetes.list
sudo apt update

7 安装kubelet、kubeadm、kubectl(指定了版本)

sudo apt update
sudo apt install -y kubelet=1.15.2-00 kubeadm=1.15.2-00 kubectl=1.15.2-00

8 查看k8s 需要的镜像资源(kubeadm config images pull)

kubeadm config  images  list

结果如下:

k8s.gcr.io/kube-apiserver:v1.15.2
k8s.gcr.io/kube-controller-manager:v1.15.2
k8s.gcr.io/kube-scheduler:v1.15.2
k8s.gcr.io/kube-proxy:v1.15.2
k8s.gcr.io/pause:3.1
k8s.gcr.io/etcd:3.3.10
k8s.gcr.io/coredns:1.3.1

8 从国内代理下载镜像,并打tag

docker pull gcr.azk8s.cn/google_containers/kube-apiserver:v1.15.2
docker pull gcr.azk8s.cn/google_containers/kube-controller-manager:v1.15.2
docker pull gcr.azk8s.cn/google_containers/kube-scheduler:v1.15.2
docker pull gcr.azk8s.cn/google_containers/kube-proxy:v1.15.2
docker pull gcr.azk8s.cn/google_containers/pause:3.1
docker pull gcr.azk8s.cn/google_containers/etcd:3.3.10
docker pull gcr.azk8s.cn/google_containers/coredns:1.3.1

docker tag gcr.azk8s.cn/google_containers/kube-apiserver:v1.15.2 k8s.gcr.io/kube-apiserver:v1.15.2
docker tag gcr.azk8s.cn/google_containers/kube-controller-manager:v1.15.2 k8s.gcr.io/kube-controller-manager:v1.15.2
docker tag gcr.azk8s.cn/google_containers/kube-scheduler:v1.15.2 k8s.gcr.io/kube-scheduler:v1.15.2
docker tag gcr.azk8s.cn/google_containers/kube-proxy:v1.15.2 k8s.gcr.io/kube-proxy:v1.15.2
docker tag gcr.azk8s.cn/google_containers/pause:3.1 k8s.gcr.io/pause:3.1
docker tag gcr.azk8s.cn/google_containers/etcd:3.3.10 k8s.gcr.io/etcd:3.3.10
docker tag gcr.azk8s.cn/google_containers/coredns:1.3.1 k8s.gcr.io/coredns:1.3.1

9 初始化kubeadmin

kubeadm init --apiserver-advertise-address 192.168.220.134  --pod-network-cidr=10.244.0.0/16

其中192.168.220.134是本机IP,10.244.0.0/16是flannel的Network。当出现以下输出时就表明kubeadmin初始化成功。

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

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.220.134:6443 --token tudd0a.erpbeohgq68qyz88 \
    --discovery-token-ca-cert-hash sha256:c957548dcf9c9288d1e69783d317b9ed605b546362daae9fb2d978d24b641e36 

上面的信息告诉我们,还需要做一些配置:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

10 安装 Pod Network(flannel)

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

11 检查pod状态,确认成功

kubectl get pods -n kube-system

结果如下:

NAME                             READY   STATUS    RESTARTS   AGE
coredns-5c98db65d4-8vb5h         1/1     Running   0          22m
coredns-5c98db65d4-dwqf7         1/1     Running   0          22m
etcd-ubuntu                      1/1     Running   0          21m
kube-apiserver-ubuntu            1/1     Running   0          22m
kube-controller-manager-ubuntu   1/1     Running   0          22m
kube-flannel-ds-amd64-kcngn      1/1     Running   0          3m22s
kube-proxy-jx62n                 1/1     Running   0          22m
kube-scheduler-ubuntu            1/1     Running   0          22m

12 部署一个nginx

kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort

检查pod状态发现一直处于pending状态,是因为master结点默认不允许部署pod。设置master部署pod命令如下:

kubectl taint nodes --all node-role.kubernetes.io/master-

master禁止部署pod命令如下:

kubectl taint nodes k8s node-role.kubernetes.io/master=true:NoSchedule
发布了24 篇原创文章 · 获赞 0 · 访问量 3370

猜你喜欢

转载自blog.csdn.net/GuXiaoyan12/article/details/103690611