K8s学习总结
集群环境搭建
初始环境配置
关闭防火墙,虚拟内存
(1)更新安装包
sudo apt update
(2)配置内存
临时关闭虚拟内存
sudo swapoff -a
永久关闭虚拟内存
sudo vim /etc/fstab
注释掉下面一行即可
#/swapfile none swap sw 0 0
时间同步
使用 chronyd 服务实现时间同步
systemctl start chronyd
stystemctl enable chronyd
date
sudo apt update && sudo apt upgrade && sudo apt autoremove
sudo timedatectl set-ntp true
sudo ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
sudo hwclock --systohc
date -R
安装 docker
配置安装环境
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
添加安装密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
设置安装稳定版
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
查看 docker 稳定版列表
apt-cache madison docker-ce
安装 docker,可以不指定版本号,默认安装最新版本
本次安装版本为 18.09
sudo apt-get install docker-ce=5:20.10.21~3-0~ubuntu-bionic
设置开机启动
sudo systemctl enable docker
添加配置信息
进入/etc/docker 目录
cd /etc/docker
添加 daemon.js 文件
sudo touch daemon.js
编辑 daemon.js
sudo vim daemon.js
添加内容如下
{
"exec-opts":["native.cgroupdriver=systemd"]
}
加载 docker 配置
systemctl daemon-reload
重启 docker
sudo systemctl restart docker
重置 docker.sock 权限
sudo chmod 666 /var/run/docker.sock
安装 docker
配置安装环境
sudo apt-get update && sudo apt-get install -y apt-transport-https
添加安装密钥
curl -fsSL https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
添加 k8s 镜像源
进入/etc/apt/sources.list.d 目录下
cd /etc/apt/sources.list.d
创建 kubernetes.list 文件
sudo touch kubernetes.list
编辑 kubernetes.list
sudo vim kubernetes.list
在 kubernetes.list 文件中添加地址如下
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
更新安装包
sudo apt-get update
改变 driver
为 docker 添加配置,,driver 采用 systemd
more /etc/docker/daemon.json
卸载 docker
sudo apt-get autoremove docker docker-ce docker-engine docker.io containerd runc
dpkg -l | grep docker
dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -P # 删除无用的相关的配置文件
sudo rm -rf /etc/systemd/system/docker.service.d
sudo rm -rf /var/lib/docker
安装 k8s
安装 kubeadm
sudo apt-get install kubelet=1.18.6-00 kubeadm=1.18.6-00 kubectl=1.18.6-00
设置开机启动
sudo systemctl enable kubelet
查看 k8s 版本
kubectl version
查看 kubelet 状态
Active: active (running)是启动状态
systemctl status kubelet
停止 kubelet
systemctl stop kubelet
启动 kubelet
systemctl start kubelet
配置 kubelet
配置 kubelet 的 cgroup
k8s 初始化
查看需要的镜像
注意:此处列出的版本可能不是(1.18.6),下面下载镜像时,版本设置一致。
kubeadm config images list
在 master 节点下载镜像
创建文件脚本
vi download.sh
脚本内容是上一步中的镜像名称
脚本内容:
images=(
kube-apiserver:v1.18.6
kube-controller-manager:v1.18.6
kube-scheduler:v1.18.6
kube-proxy:v1.18.6
pause:3.2
etcd:3.4.3-0
coredns:1.6.7
)
for imageName in ${images[@]};do
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
done
设置执行权限
chmod 777 download.sh
运行
./download.sh
# 注意,如果用虚拟机,内核数量必须要 2 个及以上。
# --image-repository 镜像加速,指定初始化下载的镜像。
# --apiserver-advertise-address 直接使用当前 master 主机地址
# --kubernetes-version k8s 版本,可以不指定,缺省情况会用最新的
# --service-cidr service 网络地址(建议使用 10.96.0.0/12,也可以不设置),不可与主机,pod 网络地址重复
# --pod-network-cidr pod 网络地址(建议使用 10.244.0.0/16),不可与主机,service 网络地址重复,与后面的 Calico 相关
# --v 日志等级,5 级以上会打印更详细的日志,--v=6 开启详细日志打印
sudo kubeadm init \
--image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers \
--apiserver-advertise-address=192.168.49.150 \
--kubernetes-version=v1.18.6 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16
如果失败可以 kubeadm reset
再次初始化
卸载 k8s
apt -y remove kubelet kubeadm kubectl
sudo kubeadm reset -f
sudo rm -rvf $HOME/.kube
sudo rm -rvf ~/.kube/
sudo rm -rvf /etc/kubernetes/
sudo rm -rvf /etc/systemd/system/kubelet.service.d
sudo rm -rvf /etc/systemd/system/kubelet.service
sudo rm -rvf /usr/bin/kube*
sudo rm -rvf /etc/cni
sudo rm -rvf /opt/cni
sudo rm -rvf /var/lib/etcd
sudo rm -rvf /var/etcd
删除节点
删除节点后,需要在相应的子节点
sudo kubectl delete nodes node1
重置主机点,慎重操作!!
手动删除配置文件
sudo rm -rf /etc/kubernetes/pki/ca.crt
sudo rm -rf /etc/kubernetes/kubelet.conf
sudo rm -rf $HOME/.kube
重置子节点
sudo kubeadm reset
重新加载配置文件
systemctl daemon-reload
重置子节点,使用以下命令即可
sudo kubeadm reset
下载 flannel 配置文件
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
安装 flannel
kubectl apply -f kube-flannel.yml
注意:创建 Pod 时,如果出现 Pod 之间无法 ping 通,可以在子节点执行以下命令
iptables 是 Linux 平台下包过滤防火墙
sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -F
sudo iptables -L -n
k8s版本升级
例v1.18.6->v1.19.6
确定要升级的版本:
apt update
apt-cache madison kubeadm
升级master节点
先升级一个控制节点
apt-mark unhold kubeadm && \
apt-get update &&apt-get install -y kubeadm=1.19.6-00 && \
apt-mark hold kubeadm
验证升级计划
kubeadm upgrade plan
报错无controlplan
则:
kubeadm upgrade plan --ignore-preflight-errors=ControlPlaneNodesReady
开始升级:
sudo kubeadm upgrade apply v1.19.6 --ignore-preflight-errors=ControlPlaneNodesReady
顺利升级结束会看到:
[upgrade/successful] SUCCESS! Your cluster was upgraded to "v1.26.x". Enjoy!
[upgrade/kubelet] Now that your control plane is upgraded, please proceed with upgrading your kubelets if you haven't already done so.
升级其他控制节点:
sudo kubeadm upgrade node
升级kubectl kubelet
apt-mark unhold kubelet kubectl && \
apt-get update &&apt-get install -y kubelet=1.29.6-00 kubectl=1.19.6-00 &&\
apt-mark hold kubelet kubectl
重启kubelet:
sudo systemctl daemon-reload
sudo systemctl restart kubelet
升级工作节点
apt-mark unhold kubeadm && \
apt-get update && apt-get install -y kubeadm=1.19.6-00 && \
apt-mark hold kubeadm
对于工作节点,下面的命令会升级本地的 kubelet 配置:
sudo kubeadm upgrade node
腾空节点 :将节点标记为不可调度并驱逐所有负载,准备节点的维护:
# 将 <node-to-drain> 替换为你正在腾空的节点的名称
kubectl drain <node-to-drain> --ignore-daemonsets
升级kubelet kubectl:
apt-mark unhold kubelet kubectl && \
apt-get update && apt-get install -y kubelet=1.19.6-00 kubectl=1.19.6-00 && \
apt-mark hold kubelet kubectl
重启kubelet:
sudo systemctl daemon-reload
sudo systemctl restart kubelet
取消对节点的保护:通过将节点标记为可调度,让节点重新上线
# 将 <node-to-uncordon> 替换为当前节点的名称
kubectl uncordon <node-to-uncordon>
手动获取 token
kubeadm token list
重新生成完整的加入集群的命令:
kubeadm token create --print-join-command
设置节点名字
kubectl label nodes your_node_name kubernetes.io/role=<name>
k8s 应用
创建 dashboard
1.下载 Dashboard yaml 文件
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta8/aio/deploy/recommended.yaml
2.修改 Dashboard 的 service 资源支持 nodeport 暴露
vim dashboard.yaml
#大概在 32 行附近
kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kubernetes-dashboard
spec:
type: NodePort #类型为 nodeport
ports:
- port: 443
targetPort: 8443
nodePort: 30017 #指定暴露的端口号
selector:
k8s-app: kubernetes-dashboard
3.创建资源
[root@k8s-master ~/k8s_1.19_yaml]# kubectl create -f dashboard.yaml
4.查看资源的状态
[root@k8s-master ~/k8s_1.19_yaml]# kubectl get all -n kubernetes-dashboard
1.创建访问账号
kubectl create serviceaccount dashboard-admin -n kubernetes-dashboard
2.将账号与 cluster-admin 集群角色进行绑定授予权限
kubectl create clusterrolebinding dashboard-admin-rb --clusterrole=cluster-admin --serviceaccount=kubernetes-dashboard:dashboard-admin
3.获取账号的 token
kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}')
或者:
get secret && describe secret
修改 dashboard 登录过期时间
1.修改 yaml
[root@k8s-master ~]# vim k8s_1.19_yaml/dashboard.yaml
spec:
containers:
- name: kubernetes-dashboard
image: kubernetesui/dashboard:v2.0.0
imagePullPolicy: Always
ports:
- containerPort: 8443
protocol: TCP
args:
- --auto-generate-certificates
- --token-ttl=86400 #过期时间为 1 天,大概在 199 行附近
2.更新资源
阿里镜像加速器地址:https://3g4p6hi0.mirror.aliyuncs.com
crd
准备
k8s集群
kubebuilder
code-generator
go
初始化
mkdir loginDemo&& cd loginDemo
go mod init mydomain/loginDemo
kubebuilder init --domain demo.com
kubebuilder create api --group admin --version v1 --kind Auth
Create Resource [y/n]
y
Create Controller [y/n]
n
安装 helm 并使用 chart
安装 helm
二进制安装
下载 需要的版本
解压(tar -zxvf helm-v3.0.0-linux-amd64.tar.gz)
在解压目中找到 helm 程序,移动到需要的目录中(mv linux-amd64/helm /usr/local/bin/helm)
然后就可以执行客户端程序并 添加稳定仓库: helm help
使用脚本安装
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh
如果想直接执行安装,运行
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
添加 chart 仓库
添加 bitnami 仓库
helm repo add bitnami https://charts.bitnami.com/bitnami
添加开源社/Azure 中国
helm repo add azure http://mirror.azure.cn/kubernetes/charts/
查看添加的仓库
helm repo list
安装 MySQL
查询 Artifact Hub 中可用的 mysql chart
helm search hub mysql
查询 repo 仓库可用的 mysql chart
helm search repo mysql
RBAC
通过用户账号的方式分配权限
1 创建用户账号
1.创建证书文件
[root@k8s-master ~]# cd /etc/kubernetes/pki/
[root@k8s-master /etc/kubernetes/pki]# (umask 077;openssl genrsa -out knowman.key 2048)
Generating RSA private key, 2048 bit long modulus
....................................................................................+++
................+++
e is 65537 (0x10001)
2.使用 apiserver 的证书签发证书请求
2-1.申请签名,证书请求,申请的用户名是 knowman,组是 knowgroup
[root@k8s-master /etc/kubernetes/pki]# openssl req -new -key knowman.key -out knowman.csr -subj "/CN=knowman/O=knowgroup"
[root@k8s-master /etc/kubernetes/pki]# ll knowman.*
-rw-r--r-- 1 root root 915 4 月 20 13:27 knowman.csr
-rw------- 1 root root 1679 4 月 20 13:25 knowman.key
2-2.签发证书(使用 apiserver 的 ca 证书签发用户证书)
[root@k8s-master /etc/kubernetes/pki]# openssl x509 -req -in knowman.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out knowman.crt -days 3650
Signature ok
subject=/CN=knowman/O=knowgroup
Getting CA Private Key
3.配置集群、用户、上下文信息
#配置集群
[root@k8s-master /etc/kubernetes/pki]# kubectl config set-cluster kubernetes --embed-certs=true --certificate-authority=/etc/kubernetes/pki/ca.crt --server=https://192.168.81.210:6443
Cluster "kubernetes" set.
#配置用户信息
[root@k8s-master /etc/kubernetes/pki]# kubectl config set-credentials knowman --embed-certs=true --client-certificate=/etc/kubernetes/pki/knowman.crt --client-key=/etc/kubernetes/pki/knowman.key
User "knowman" set.
#配置上下文信息
[root@k8s-master /etc/kubernetes/pki]# kubectl config set-context knowman@kubernetes --cluster=kubernetes --user=knowman
Context "knowman@kubernetes" created.
4.查看配置的集群信息
[root@k8s-master /etc/kubernetes/pki]# kubectl config view
5)切换到 knowman 用户
[root@k8s-master /etc/kubernetes/pki]# kubectl config use-context knowman@kubernetes
Switched to context "knowman@kubernetes".
6)试着查看下 know-system 命名空间下的资源
[root@k8s-master /etc/kubernetes/pki]# kubectl get pod -n know-system
Error from server (Forbidden): pods is forbidden: User "knowman" cannot list resource "pods" in API group "" in the namespace "know-system"
#可以看到没有权限访问
7)切换到 admin 用户进行授权
[root@k8s-master ~]# kubectl config use-context kubernetes-admin@kubernetes
Switched to context "kubernetes-admin@kubernetes"
2 创建 ClusterRole 资源设置权限
1.编写 ClusterRole 资源
[root@k8s-master ~/k8s_1.19_yaml/rbac]# vim knowman-clusterrole.yaml
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
name: knowman-clusterrole
rules: #定义角色
- apiGroups: ["","apps"] #对哪个 api 组进行授权,""核心资源组,apps 组是 deployment 控制器所在的 api 组
resources: ["pods","deployments"] #对什么资源进行授权
verbs: #具体的权限列表
- get
- list
- watch
2.创建资源
[root@k8s-master ~/k8s_1.19_yaml/rbac]# kubectl create -f knowman-clusterrole.yaml
clusterrole.rbac.authorization.k8s.io/knowman-clusterrole created
3.查看资源
[root@k8s-master ~/k8s_1.19_yaml/rbac]# kubectl get clusterrole knowman-clusterrole
NAME CREATED AT
knowman-clusterrole 2021-04-20T06:26:20Z
4.查看资源的详细信息
[root@k8s-master ~/k8s_1.19_yaml/rbac]# kubectl describe clusterrole knowman-clusterrole
3 创建 RoleBinding 资源将用户和角色绑定
1.编写 yaml
[root@k8s-master ~/k8s_1.19_yaml/rbac]# vim knowman-rolebinding.yaml
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: RoleBinding
metadata:
name: knowman-rolebinding
namespace: know-system
subjects: #关联用户信息
- kind: User #类型为用户
name: knowman #用户名称
namespace: know-system #角色所能控制的命名空间
apiGroup: rbac.authorization.k8s.io
roleRef: #关联角色信息
kind: ClusterRole #类型为 ClusterRole
name: knowman-clusterrole #角色名称
apiGroup: rbac.authorization.k8s.io
2.创建资源
[root@k8s-master ~/k8s_1.19_yaml/rbac]# kubectl create -f knowman-rolebinding.yaml
rolebinding.rbac.authorization.k8s.io/knowman-rolebinding created
3.查看资源
[root@k8s-master ~/k8s_1.19_yaml/rbac]# kubectl get rolebinding knowman-rolebinding -n know-system
NAME ROLE AGE
knowman-rolebinding ClusterRole/knowman-clusterrole 17s
4.查看资源的详细信息
[root@k8s-master ~/k8s_1.19_yaml/rbac]# kubectl describe rolebinding knowman-rolebinding -n know-system
4 切换到用户查看权限
1.切换用户
[root@k8s-master ~/k8s_1.19_yaml/rbac]# kubectl config use-context knowman@kubernetes
Switched to context "knowman@kubernetes".
2.查看可以操作的 pod/deployment 资源
[root@k8s-master ~/k8s_1.19_yaml/rbac]# kubectl get pod,deployment -n know-system
NAME READY STATUS RESTARTS AGE
pod/deploy-nginx-5cfd6fd7bd-79z4t 1/1 Running 1 6d3h
pod/deploy-nginx-5cfd6fd7bd-b67wf 1/1 Running 1 6d3h
pod/deploy-nginx-5cfd6fd7bd-qpl2w 1/1 Running 1 6d3h
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/deploy-nginx 3/3 3 3 6d5h
3.删除 pod 查看是否有权限
[root@k8s-master ~/k8s_1.19_yaml/rbac]# kubectl delete pod deploy-nginx-5cfd6fd7bd-79z4t -n know-system
Error from server (Forbidden): pods "deploy-nginx-5cfd6fd7bd-79z4t" is forbidden: User "knowman" cannot delete resource "pods" in API group "" in the namespace "know-system"
#无权删除
Question
k8s
Q1:进程被占用:
处理方式:
找到该进程,然后 kill 它,然后可以删除锁并重新配置 dpkg:
lsof /var/lib/dpkg/lock-frontend
sudo kill -3662 PID
sudo rm /var/lib/dpkg/lock-frontend
sudo dpkg --configure -a
Q2: 删除ns 处于Terminating
kubectl get namespace dev -o json > tmp.json
修改导出文件,删除其中的finalizers这一项,其他保持不变
开启代理
kubectl proxy
curl -k -H "Content-Type: application/json" -X PUT --data-binary @tmp.json http://127.0.0.1:8001/api/v1/namespaces/dev/finalize
Q3: 节点notReady
master节点notReady
只有master节点notReady,日志无其他报错
- 尝试重启,可行
Q4: master not found
问题:
The connection to the server 192.168.49.150:6443 was refused - did you specify the right host or port?
解决:
Q5: 创建pod失败
- pod 处于CrashLoopBackOff
describe 发现:
原理:
Back-off restarting failed container的Warning事件,一般是由于通过指定的镜像启动容器后,容器内部没有常驻进程,导致容器启动成功后即退出,从而进行了持续的重启。
解决办法:
找到对应的deployment(ds)添加以下信息:
command: ["/bin/bash","-ce","tail -f /dev/null"]
Q6: kubelet 服务无法启动
kubelet无法启动报 code=exited,status=1/FAILURE 错误 多种原因及解决
1 证书过期导致 kubelet 无法正常起动。
2 驱动问题,即 docker 的驱动与 kubelet 驱动不一致
Q7: k8s 无法删除状态为terminating的pod
ps:每当删除namespace或pod 等一些Kubernetes资源时,有时资源状态会卡在terminating,
很长时间无法删除,甚至有时增加–force flag(强制删除)之后还是无法正常删除。
这时就需要edit该资源,将字段finalizers设置为null,之后Kubernetes资源就正常删除了。
<1>强制删除
kubectl delete pod xxx -n xxx --force --grace-period=0
<2>如果强制删除不行,设置finalizers为空
ps:ps: 如果一个容器已经在运行,这时需要对一些容器属性进行修改,又不想删除容器,或不方便通过replace的方式进行更新。
kubernetes还提供了一种在容器运行时,直接对容器进行修改的方式,就是patch命令。
kubectl patch pod xxx -n xxx -p '{"metadata":{"finalizers":null}}'
root@rancher-master:~# docker info | grep Cgroup
Cgroup Driver: cgroupfs
Cgroup Version: 1
WARNING: No swap limit support
root@rancher-master:~# cat /var/lib/kubelet/config.yaml | grep cgroup
cgroupDriver: systemd
修改 docker 驱动为 systemd
查看/etc/docker/daemon.json 文件
3 配置文件不存在
(1)先去查看下你的: /etc/systemd/system/kubelet.service.d 下是否有 10-kubeadm.conf.如果没有需要创建这个文件,并复制如下内容。
[Service]
Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf"
Environment="KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml"
EnvironmentFile=-/var/lib/kubelet/kubeadm-flags.env
# This is a file that the user can use for overrides of the kubelet args as a last resort.
EnvironmentFile=-/etc/default/kubelet
ExecStart=
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS
(2)如有有这个文件,则在文件中加入如代码
Environment="KUBELET_SYSTEM_PODS_ARGS=--pod-manifest-path=/etc/kubernetes/manifests --allow-privileged=true --fail-swap-on=false"
(3)重新启动 kubelet.service
systemctl daemon-reload
systemctl restart kubelet.service
如果配置高版本 kubeadm 需要卸载 可以执行
apt-get --purge remove kubeadm
kubelet kubectl 同理
docker
Q1:利用 docker 创建容器,容器被占用
root@master:/# docker run -d -p 443:443 -p 30010:80 -p 222:22 --name gitlab --restart always -v /docker/gitlib/config:/etc/gitlab -v /docker
docker: Error response from daemon: Conflict. The container name "/gitlab" is already in use by container "309061f51869c5380d8b0ed0e311bc17cd
See 'docker run --help'.
1,先查看容器:
docker ps -a
看到了这个名为 gitlab/gitlab-ce 的容器
“docker ps” 是查看当前运行的容器,“docker ps -a” 是查看所有容器(包括停止的)。
移除这个容器
docker rm 309061f51869
然后再创建新容器
问题解决
Github 问题
ssh 连接
git remote add origin******
The authenticity of host 'github.com ' can't be established(无法建立主机“github.com”的真实性)
解决办法:
这是由于 git 地址采用了 ssh 方式,切换为 https 方式即可
也可能是仓库地址不对,可以用命令先查看一下:git remove -v
如果跟你的 github 地址不一样,那就去你的 github 上复制一下仓库地址
git remote set-url origin https://github.com/yourname/learngit.git (这个是你的复制的仓库地址)
最后再 push 下就可以了!
git push origin (branch)
密码登录失败,token 登录
问题:
remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/raye-s/test.git/'
大概意思就是你原先的密码凭证从 2021 年 8 月 13 日开始就不能用了,必须使用个人访问令牌(personal access token),就是把你的密码替换成 token!
解决
在个人设置页面,找到 Settings
选择开发者设置 Developer setting
选择个人访问令牌 Personal access tokens,然后选中生成令牌 Generate new token
设置 token 的有效期,访问权限等
要使用 token 从命令行访问仓库,请选择 repo。
要使用 token 从命令行删除仓库,请选择 delete_repo
其他根据需要进行勾选
我的 token:
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
也可以 把 token 直接添加远程仓库链接中,这样就可以避免同一个仓库每次提交代码都要输入 token 了:
git remote set-url origin https://<token>@github.com/<用户名>/<仓库名>.git
<token>:换成你自己得到的 token
<用户名>:是你自己 github 的用户名
<仓库名>:是你的仓库名称
github 无法访问或者访问过慢
修改 C:\Windows\System32\drivers\etc 下的 hosts 文件
查看github IP;
复制最新的 IP,添加到 hosts 文件中
下次不能访问了,修改为最新的 IP 就行。
如果还是不行,打开 cmd 输入:
ipconfig/flushdns
github 推送到仓库
origin 已经存在
git remote add origin**************
fatal: remote origin already exists.(报错远程起源已经存在。)
解决方法
1.先输入 git remote rm origin
2.再输入 git remote add origin**************
在命令行上创建新的仓库
echo "# 111" >> README.md
git init
git add README.md
git commit -m "first commit"
git branch -M master
git remote add origin git@github.com:<用户名>/<仓库名>.git.
git push -u origin master
推送现有仓库
git remote add origin git@github.com:raye17/111.git
git branch -M master
git push -u origin master
因远程库与本地库不一致导致问题
问题原因:
远程库与本地库不一致造成的,在 hint 中也有提示,只要把远程库同步到本地库就行了。
解决办法:
使用命令行:
git pull --rebase origin master
该命令的意思是把远程库中的更新合并到(pull=fetch+merge)本地库中, –-rebase的作用是取消掉本地库中刚刚的commit,并把他们接到更新后的版本库之中。
执行 pull 执行成功后,可以成功执行 git push origin master 操作。
fatal: Updating an unborn branch with changes added to the index.
提交到版本库中的文件没有没有提交到分支中,还在暂存区 所以执行
git commit
##
git clone 问题
问题:
fatal: unable to access 'https://github.com/libcheck/check.git/': GnuTLS recv error (-110): The TLS connection was non-properly terminated.
解决:
apt-get install gnutls-bin
git config --global http.sslVerify false
git config --global http.postBuffer 1048576000
openssl
问题:
Can't load /root/.rnd into RNG
140574087516608:error:2406F079:random number generator:RAND_load_file:Cannot open file:../crypto/rand/randfile.c:88:Filename=/root/.rnd
解决:
cd /root
openssl rand -writerand .rnd
虚拟机修改 ssh
192.168.53.10
vi /etc/resolv.conf
修改 dns
apt install ssh
cd /etc/ssh
vi sshd_conf
登录改为 yes
systemctl restart ssh
ubuntu 重启,修改resolv.conf
vi /etc/systemd/resolved.conf
将DNS注释取消,并添加8.8.8.8
へ /|
/\7 ∠_/
/ │ / /
│ Z _,< / /`ヽ
│ ヽ / 〉
Y ` / /
イ● 、 ● ⊂⊃〈 /
() へ | \〈
>ー 、_ ィ │ //
/ へ / ノ<| \\
ヽ_ノ (_/ │//
7 |/
>―r ̄ ̄`ー―_ —
--pika